Cod sursa(job #1147951)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 20 martie 2014 12:11:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
#define maxn 50001
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
long long int arbore[maxn];
long long int n,m,op,x,op11,op2,sa_1,sb;
int putere(int x){
    return x&-x;
}
void op0(int ind, int val){
    int poz=0;
    while(ind<=n){
        arbore[ind]+=val;
        ind+=putere(ind);
    }
}

void op1(int a,int b){
    int poz;
    sa_1=0; // sa_1= suma<1,a-1>
    sb=0;   //sb=suma<1,b>       // suma va fi data de sb-sa_1
    //sa_1:
    a=a-1;
  //  poz=0;
    while(a>0){
        sa_1+=arbore[a];
        //while( (a && 1<<poz)==0)
         //   ++poz;
        a-=putere(a);
       // ++poz;
    }
    //sb:
    poz=0;
    while(b>0){
        sb+=arbore[b];
       // while((b && 1<<poz)==0)
       //     ++poz;
        b-=putere(b);
       // ++poz;
    }
    g<<sb-sa_1<<"\n";
}

int main(){
    f>>n>>m;
    for(int i=1;i<=n;++i){
        f>>x;
        op0(i,x);

    }
   // for(int i=1;i<=n;++i)
    //   g<<arbore[i]<<" ";

    for(int i=1;i<=m;++i){
        f>>op>>op11>>op2;
        if(op==0){
            op2=-op2;
            op0(op11,op2);
        }
        else{
        op1(op11,op2);
        }
    }
    //f>>n;
    //while(n>0){
   // g<<putere(n)<<" ";
 //   n-=putere(n);
  //  }
    return 0;


}