Cod sursa(job #2911564)

Utilizator StefannnnnStefan Stefannnnn Data 30 iunie 2022 16:02:10
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const int NMAX = 100001;
int v[NMAX], n;
long long AIB[NMAX];
void set(int i, int val){
    while(i<=n){
        AIB[i] += val;
        i += i & (-i);
    }
}
long long suma(int i){
    long long sum=0;
    while(i>0){
        sum += AIB[i];
        i -= i & (-i);
    }
    return sum;
}
int main()
{
    cin>>n;
    int q;
    cin>>q;
    for(int i=1; i<=n; i++){
        cin>>v[i];
    }
    for(int i=1; i<=n; i++){
        set(i, v[i]);
    }
    for(int t=0; t<q; t++){
        int a;
        cin>>a;
        if(a==0){
            int x, y;
            cin>>x>>y;
            set(x, y);
            //cout<<0;
        }
        else if(a==1){
            int x, y;
            cin>>x>>y;
            cout<<suma(y) - suma(x-1)<<endl;
            //cout<<1;
        }
        else{
            int x;
            cin>>x;
            int r=n+1, l=1;
            while(l<r){
                int mid = (r+l)/2;
                if(suma(mid) < x)
                    l = mid+1;
                else r = mid;
                //cout<<l<<" "<<r<<endl;
            }
            cout<<r<<endl;
        }
    }
    return 0;
}