Cod sursa(job #1210820)

Utilizator DjokValeriu Motroi Djok Data 21 iulie 2014 12:06:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<algorithm>
using namespace std;

int arb[60005],n,m,i,x,y,rs;
bool op;

void update(int left,int right,int nod) {
   if(left==right) arb[nod]-=y;
   else {
          int pivot=(left+right)/2;
          if(x<=pivot) update(left,pivot,2*nod);
          else update(pivot+1,right,2*nod+1);
          arb[nod]=arb[2*nod]+arb[2*nod+1];
        }  
}

void query(int left,int right,int nod) {
   if(left>=x && right<=y) rs+=arb[nod];
   else {
          int pivot=(left+right)/2;
          if(x<=pivot) query(left,pivot,2*nod);
          if(y>pivot) query(pivot+1,right,2*nod+1);
        }   
}

int main()
{
  ifstream cin("datorii.in");
  ofstream cout("datorii.out");
  
  cin>>n>>m;
  for(i=1;i<=n;++i) cin>>y,y*=-1,x=i,update(1,n,1);
  
  while(m--)
  {
    cin>>op>>x>>y;
    if(!op) update(1,n,1);
    else rs=0,query(1,n,1),cout<<rs<<'\n';        
  }
    
 return 0;   
}