Cod sursa(job #2040815)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 16 octombrie 2017 16:24:34
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <vector>

using namespace std;
int a[100001];
int n;
void update (int p,int x){
    // v[p]+=val
    for (;p<=n;p+=(p&-p))
        a[p]+=x;
}
int query (int p){
    int s=0;
    for (;p;p-=(p&-p))
        s+=a[p];
    return s;
}
int main()
{
    FILE *fin=fopen ("aib.in","r");
    FILE *fout=fopen ("aib.out","w");
    int m,i,st,dr,mid,cer,a,b,x;
    fscanf (fin,"%d%d",&n,&m);
    for (i=1;i<=n;i++){
        fscanf (fin,"%d",&x);
        update (i,x);
    }
    for (i=1;i<=m;i++){
        fscanf (fin,"%d",&cer);
        if (cer==0){
            fscanf (fin,"%d%d",&a,&b);
            update (a,b);
        }
        else if (cer==1){
            fscanf (fin,"%d%d",&a,&b);
            fprintf (fout,"%d\n",query(b)-query(a-1));
        }
        else {
            fscanf (fin,"%d",&a);
            st=1;
            dr=n;
            while (st<=dr){
                mid=(st+dr)/2;
                if (query(mid)<a)
                    st=mid+1;
                else dr=mid-1;
            }
            fprintf (fout,"%d\n",st);
        }
    }
    return 0;
}