Cod sursa(job #1437659)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 18 mai 2015 10:52:03
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<stdio.h>
using namespace std;
int aib[100001],n;
void add(int poz,int val){
    while(poz<=n){
        aib[poz]+=val;
        poz=poz+((poz&(poz-1))^poz);
    }
}
int sum(int poz){
    int s=0;
    while(poz>0){
        s+=aib[poz];
        poz=poz-((poz&(poz-1))^poz);
    }
    return s;
}
int main(){
    freopen("aib.in","r",stdin);
    freopen("aib.out","w",stdout);
    int m,i,a,b,tip,l1,l2,mij,x;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++){
        scanf("%d",&a);
        add(i,a);
    }
    for(i=1;i<=m;i++){
        scanf("%d",&tip);
        if(tip==0){
            scanf("%d%d",&a,&b);
            add(a,b);
        }
        if(tip==1){
            scanf("%d%d",&a,&b);
            printf("%d\n",sum(b)-sum(a-1));
        }
        if(tip==2){
            scanf("%d",&a);
            l1=1;
            l2=n;
            while(l1<=l2){
                mij=(l1+l2)/2;
                x=sum(mij);
                if(x==a){
                    printf("%d\n",mij);
                break;
                }
                if(x<a)
                    l1=mij+1;
                if(x>a)
                    l2=mij-1;
            }
            if(l1>l2)
                printf("-1\n");
        }
    }
    return 0;
}