Cod sursa(job #968825)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 2 iulie 2013 20:35:20
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,el,a[300005],sol=0;
void Update(int nod,int st,int dr,int i,int val)
{ int mid;
  if (st==dr) a[nod]-=val;
 else
 { mid=(st+dr)/2;
    if (i<=mid) Update(2*nod,st,mid,i,val);
     else Update(2*nod+1,mid+1,dr,i,val);
    a[nod]=a[2*nod]+a[2*nod+1];
 }
}
void Query(int nod,int st,int dr,int x,int y)
{ int mid;
 if (x<=st && dr<=y) sol+=a[nod];
 else
 { mid=(st+dr)/2;
    if (x<=mid) Query(2*nod,st,mid,x,y);
     if (y>mid) Query(2*nod+1,mid+1,dr,x,y);
 }
}
int main()
{ int i,t,b,e;
    f>>n>>m;

   for(i=1;i<=n;i++)
    { f>>el; Update(1,1,n,i,-1*el);}

  for(i=1;i<=m;i++)
   { f>>t>>b>>e;
     if (t) {sol=0; Query(1,1,n,b,e); g<<sol<<"\n";}
      else Update(1,1,n,b,e);
   }


    return 0;
}