Cod sursa(job #695104)

Utilizator giuliastefGiulia Stef giuliastef Data 28 februarie 2012 10:30:48
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
// Datorii

#include <fstream>
#define NMAX 300011
using namespace std;
int N,M,A[NMAX],Pos,Val,Start,Finish,Sum;
void Update(int nod, int left, int right){
     if(left==right){ 
      A[nod]-=Val;
      return;
     }
     int mid=(left+right)/2;
     if(Pos<=mid) Update(2*nod,left,mid);
     else Update(2*nod+1,mid+1,right);
     A[nod]=A[2*nod]+A[2*nod+1];
}
void Query(int nod, int left, int right){
     if(Start<=left && right<=Finish){
      Sum+=A[nod];
      return;
     }
     int mid=(left+right)/2;
     if(Start<=mid)
      Query(2*nod,left,mid);
     if(Finish>mid)
      Query(2*nod+1,mid+1,right);
}
int main(){
    int i,op;
    ifstream in("datorii.in");
    ofstream out("datorii.out");
    in>>N>>M;
    for(i=1;i<=N;i++){
     in>>Val;
     Pos=i;
     Val=-Val;
     Update(1,1,N);
    }
    for(;M>0;M--){
     in>>op;
     if(op==0){ 
      in>>Pos>>Val;
      Update(1,1,N);
     }
     else{
          Sum=0;
          in>>Start>>Finish; 
          Query(1,1,N);
          out<<Sum<<"\n";
     }
    }
    in.close();
    out.close();
    return 0;
}