Cod sursa(job #2568640)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 4 martie 2020 08:53:56
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,tip,a,b,i,x;
int aib[dim];
int query(int poz){
    int r=0;
    for(;poz;poz-=poz&-poz)
        r+=aib[poz];
    return r;
}
int update(int poz,int val){
    for(;poz<=n;poz+=poz&-poz){
        aib[poz]+=val;
    }
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++){
            fin>>x;
        update(i,x);
    }
    for(i=1;i<=m;i++){
          fin>> tip;
        if(tip==0){
            fin>>a>>b;
            update(a,b);
        }else if(tip==1){
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<"\n";
        }
        else{
            int st=1,dr=n,mid;
            fin>>x;
            while(st<=dr){
                mid=(st+dr)/2;
                int q=query(mid);
                if(q>=x)
                    dr=mid-1;
                else
                    st=mid+1;
            }
            int q=query(st);
            if(q!=x)
                fout<<-1<<"\n";
            else fout<<st<<"\n";
        }
    }
}