Cod sursa(job #1147853)

Utilizator Claudiu95Vartolomei Alexandru Claudiu Claudiu95 Data 20 martie 2014 10:50:26
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 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;

void op0(int ind, int val){
    int poz=0;
    while(ind<=n){
        arbore[ind]+=val;
        while((ind && 1<<poz)==0)
            ++poz;
        ind+=1<<poz;
        ++poz;
    }
}
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-=1<<poz;
        ++poz;
    }
    //sb:
    poz=0;
    while(b>0){
        sb+=arbore[b];
        while((b && 1<<poz)==0)
            ++poz;
        b-=1<<poz;
        ++poz;
    }
    g<<sb-sa_1-3<<"\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);
        }
    }
    return 0;


}