Cod sursa(job #3283523)

Utilizator Theo_PetrescuPetrescu Theodor Theo_Petrescu Data 9 martie 2025 18:56:18
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
 #include <fstream>

  
 using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
   
 const int nmax=15001;
 int aint[4*nmax+5];
 int poz, val,sum; // v[poz]+=val
 int P, Q; // P<=Q suma pe intervalul v[P]......v[Q]
 
 void update (int nod,int st,int dr)
 {
   if(st==dr)
   {
     aint[nod]+=val;
     return ;
   }
   int mij=(st+dr)/2;
   if(poz <= mij)
      update(2*nod, st, mij);
   else
      update(2*nod+1,mij+1,dr);
    aint[nod]=aint[2*nod]+ aint[2*nod+1];
 }
 void query(int nod ,int st,int dr)
 {  //  P  st    dr Q
   //     st....mij     mij+1.....dr
    if(st >= P && dr <= Q)
    {
      sum+=aint[nod];
      return ;
    }
    int mij=(st+dr)/2;
    if(P <= mij)
        query(2*nod,st,mij);
    if(Q >= mij+1)
        query(2*nod+1,mij+1,dr);
 }
 
 
int main(){
  int n,m,c,x,y;
  fin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    fin>>val;
    poz=i;
    update(1,1,n);
  }
  for(int i=1;i<=m;i++)
  {
    fin>>c>>x>>y;
    if(c==0)
    {
      poz=x;
      val=-y;
      update(1,1,n);
    }
    else
    {
      P=x;
      Q=y;
      sum=0;
      query(1,1,n);
      fout<<sum<<'\n';
    }
  }
  return 0;  
}