Cod sursa(job #1058527)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 15 decembrie 2013 17:16:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<fstream>
#define maxnod 32799//(1<<15)=32768
using namespace std;
ifstream fi("datorii.in");
ofstream fo("datorii.out");

int i,n,m,arb[maxnod];
int oper,a,b,x,poz,q;

void creare_arb(int nod,int st,int dr){
     if (st==dr) fi>>arb[nod];
     else{
          creare_arb(2*nod,st,(st+dr)/2);
          creare_arb(2*nod+1,(st+dr)/2+1,dr);
          arb[nod]=arb[2*nod]+arb[2*nod+1];
         }
}

void query(int nod,int st,int dr){
     if(a<=st && dr<=b){
                        q+=arb[nod];
                       }
     else{
          int mijl=(st+dr)/2;
          if(a<=mijl) query(2*nod,st,mijl);
          if(mijl+1<=b) query(2*nod+1,mijl+1,dr);
         } 
}

void update(int nod,int st,int dr){
     if(st==dr) arb[nod]-=x;
     else{
          int mijl=(st+dr)/2;
          if(poz<=mijl) update(2*nod,st,mijl);
          else update(2*nod+1,mijl+1,dr);
          arb[nod]=arb[2*nod]+arb[2*nod+1];
         }
}

int main(){
    fi>>n>>m;
    
    creare_arb(1,1,n);
   
    for(i=1;i<=m;i++){
                      fi>>oper;
                      if(oper==1){
                                  fi>>a>>b; q=0;
                                  query(1,1,n);
                                  fo<<q<<"\n";
                                 }
                      else{
                           fi>>poz>>x;
                           update(1,1,n);
                          }
                     }   
    
    fi.close();
    fo.close();
    return 0;
}