Cod sursa(job #2396630)

Utilizator Leonard123Mirt Leonard Leonard123 Data 3 aprilie 2019 18:01:00
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
#define maxn 100001
ifstream cin("aib.in");
ofstream cout("aib.out");
int N,M,s[maxn],op;

void read(int N){
    s[0]=0;
    for(int i=1; i<=N; i++){
        cin>>s[i];
        s[i]+=s[i-1];
    }
}

int bs(int val){
    int i,step;
    for(step=1; step<N; step<<=1);
    for(i=0; step; step >>=1){
        if(i+step<=N){
            if(val>=s[i+step]){
                i+=step, val-= s[i];
                if(!val) return i;
            }
        }
    }
    return -1;
}

void solve(int op){
    int x,y;
    if(op==0){
        cin>>x>>y;
        for(;x<=N; x++)
            s[x]+=y;
    } else if(op==1){
        cin>>x>>y;
        cout<<s[y]-s[x-1]<<'\n';
    }else if(op==2){
        int ok=1,i;
        cin>>x;
        cout<<bs(x)<<'\n';
        }
    }

int main()
{
    cin>>N>>M;
    read(N);
    for(;M;M--){
        cin>>op;
        solve(op);
    }

}