Cod sursa(job #2952860)

Utilizator RaduDumitriuDumitriu Radu RaduDumitriu Data 10 decembrie 2022 09:19:09
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");


#define ultb(i) (i&(-i))

void update(int aib[],int poz,int lun, int nract)
{
   for (int i=poz;i<=lun;i+=ultb(i))
   {
      aib[i]+=nract;
   }
}

void scade(int aib[],int poz,int lun, int nract)
{
   for (int i=poz;i<=lun;i+=ultb(i))
   {
      aib[i]-=nract;
   }
}

int sum(int aib[],int poz)
{
   int s=0;
   for (int i=poz;i>0;i-=ultb(i))
   {
      s+=aib[i];
   }
   return s;
}

int sum2(int aib[],int pma, int pmi)
{
   int s=sum(aib,pma)-sum(aib,pmi-1);
   return s;
}

int main()
{
    int lun,cer;
    in >> lun >> cer;
    int aib[lun];
    for (int i =1;i<=lun;i++)
    {
       aib[i]=0;
    }
    int nract;
    for (int i=1;i<=lun;i++)
    {
       in>>nract;
       update(aib,i,lun,nract);
    }
    int ceract;
    int t,v;
    while (cer--)
    {
       in >> ceract;
       in>>t>>v;
       if (ceract==0)
       {
          scade(aib,t,lun,v);
       }
       if (ceract==1)
       {
          out << sum2(aib,v,t) << "\n";
       }
    }
}


///radu dumitriu copyright all rights reserved 2022 TM