Cod sursa(job #1183035)

Utilizator usermeBogdan Cretu userme Data 8 mai 2014 13:17:41
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda aib-uri Marime 1.11 kb
#include <cstdio>
 
FILE*f=fopen("aib.in","r");
FILE*h=fopen("aib.out","w");
 
int t[100001];
 
int n,m;
 
int query(int i){
    int s=0;
    while ( i!=0 ){
        s+=t[i];
        i-= ( i&-i );
    }
    return s;
}
 
void update(int i, int val){
    while ( i<=n ){
        t[i]+=val;
        i+= ( i&-i );
    }
}
 
int main()
{
    fscanf(f,"%d%d",&n,&m);
    for ( int i=1;i<=n;++i ){
        int x;
        fscanf(f,"%d",&x);
        update(i,x);
    }
    for ( int i=1;i<=m;++i ){
        int fl,x,y;
        fscanf(f,"%d",&fl);
        if ( fl==0 ){
            fscanf(f,"%d%d",&x,&y);
            update(x,y);
        }
        if ( fl==1 ){
            fscanf(f,"%d%d",&x,&y);
            fprintf(h,"%d\n",query(y)-query(x-1));
        }
        if ( fl==2 ){
            int p=0;
            fscanf(f,"%d",&x);
            for ( int pas=1<<17;pas;pas/=2 )
                if ( p+pas<=n&&query(p+pas)<x )p+=pas;
            if ( query(p+1)==x )
                fprintf(h,"%d\n",p+1);
            else
                fprintf(h,"-1\n");
        }
    }
    return 0;
}