Cod sursa(job #3323424)

Utilizator PetreIonutPetre Ionut PetreIonut Data 18 noiembrie 2025 12:46:51
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define NMAX 100005
#define ll long long

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

using namespace std;

int n, q, ans;
int a[NMAX], aib[NMAX];

void add(int x, int val){
    for(int i=x;i<=n;i+=i&-i) aib[i]+=val;
}

ll sum(int x){
    ll ans=0;
    for(int i=x;i>=1;i-=i&-i) ans+=aib[i];
    return ans;
}

void update(){
    int x, val;
    f >> x >> val;
    add(x, val);
}

void solve1(){
    int x, y;
    f >> x >> y;
    g << sum(y)-sum(x-1) << '\n';
}

int cb(ll x){
    int st=1, dr=n, ans=-1;
    while(st<=dr){
        int mij=(st+dr)/2, k=sum(mij);
        if(k>=x) ans=mij, dr=mij-1;
        else st=mij+1;
    }
    return ans;
}

void solve2(){
    int x;
    f >> x;
    g << cb(x) << '\n';
}

int main(){
    f >> n >> q;
    for(int i=1;i<=n;i++) f >> a[i], add(i, a[i]);
    for(int i=1;i<=q;i++){
        int cer;
        f >> cer;
        if(cer==0) update();
        else if(cer==1) solve1();
        else solve2();
    }
}