Cod sursa(job #3004920)

Utilizator AndPitAndreeaPiticar AndPit Data 16 martie 2023 18:02:00
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int v[100001],n;
int tree[100001];
int ask(int poz){
    int rez=0;
    while(poz){
        rez+=tree[poz];
        poz-=poz&(-poz);
    }
    return rez;
}
void add(int poz,int val){
    while(poz<=n){
        tree[poz]+=val;
        poz+=poz&(-poz);
    }
}
int query(int L,int R){
    if(L>R)
        return 0;
    else
        return ask(R)-ask(L-1);
}
int main(){
    int m;
    f>>n>>m;
    for(int i=1;i<=n;++i){
        f>>v[i];
        add(i,v[i]);
    }
    int cer,a,b;
    while(m--){
        f>>cer>>a;
        if(cer==0){
            f>>b;
            v[a]+=b;
            add(a,b);
        }
        if(cer==1){
            f>>b;
            g<<query(a,b)<<'\n';
        }
        if(cer==2){
            if(ask(1)==a)
                g<<1<<'\n';
            else{
                bool ok=true;
                int k=2,r=0;
                do{
                    r=ask(k);
                    if(r==a)
                        ok=false;
                    k++;
                }while(ok&&r<=a);
                if(ok)
                    g<<-1<<'\n';
                else
                    g<<k-1<<'\n';
            }
        }
    }
    return 0;
}