Cod sursa(job #3215111)

Utilizator miruna.abAbaianiti Miruna miruna.ab Data 14 martie 2024 18:08:18
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int v[100001], n, m, c, a, b, i, j, st, dr, mij, k, p;
long long int suma, tree[100001], s1, s2;
int main()
{
    fin>>n>>m;
    for(i=1; i<=n; i++){fin>>v[i];}
    for(i=1; i<=n; i++){
        p=i&(-i);
        for(k=1; k<=p; k++){
        tree[i]+=v[i-p+k];
        }
    }
    for(i=1; i<=m; i++){
        fin>>c;
    if(c==0){
            fin>>a>>b;
            while(a<=n){
                tree[a]=tree[a]+b;
                a=a+(a&-a);
            }
        }
        else if(c==1){
            fin>>a>>b;
            s1=0;
            s2=0;
            while(b>=1){
                s1+=tree[b];
                b=b-(b&-b);
            }
            a--;
            while(a>=1){
                s2+=tree[a];
                a=a-(a&-a);
            }
            fout<<s1-s2<<endl;
        }
        else{
            fin>>a;
            k=1;
            s1=0;
            while(k<=n){
                s1=tree[k];
                if(a==s1){fout<<k<<endl; break;}
                k=k+(k&-k);
            }
       }
   }
}