Cod sursa(job #3159907)

Utilizator MrPuzzleDespa Fabian Stefan MrPuzzle Data 22 octombrie 2023 14:39:34
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
using namespace std;

//ifstream f("in.in");
//ofstream g("out.out");

ifstream f("aib.in");
ofstream g("aib.out");

long long n,m,v[100005],t,x,a,b;

void update(long long poz,long long val){
    for(long long i=poz;i<=n;i+=i&-i){
        v[i]+=val;
    }
}

long long query(long long poz){
    long long val = 0;
    for(long long i=poz;i>=1;i-=i&-i){
        val+=v[i];
    }
    return val;
}

signed main()
{
    f>>n>>m;
    for(long long i=1;i<=n;i++){
        f>>x;
        update(i,x);
    }

    for(long long i=1;i<=m;i++){
        f>>t;

        if(t==0){
            f>>a>>b;
            update(a,b);
        }else if(t==1){
            f>>a>>b;
            g<<query(b)-query(a-1)<<'\n';
        }else{
            f>>x;

            long long st,dr,mid,sol;
            st=1;dr=n;sol = -1;
            while(st<=dr){
                mid = (st+dr)/2;
                if(query(mid)>=x){
                    sol = mid;
                    dr = mid-1;
                }else{
                    st = mid+1;
                }
            }
            if(query(sol) == x){
                g<<sol<<'\n';
            }else{
                g<<"-1\n";
            }
        }
    }

    return 0;
}