Cod sursa(job #3334327)

Utilizator den1edFarcas David den1ed Data 17 ianuarie 2026 10:50:27
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n,m;
vector<int>aib;
int lsb(int x) {
    return (x&(-x));
}

int query ( int idx ) {
    int sum = 0;
    for (; idx > 0; idx -= ( idx & - idx ) ) {
        sum += aib [ idx ];
    }
    return sum ;
}

void update ( int idx , int val ) {
    for (; idx <= n ; idx += ( idx & - idx ) ) {
        aib [ idx ] += val ;
    }
}
int c2(int val) {
    int ans = 0;
    for (int i = (1 << 17); i; i >>= 1)
    {
        if (ans + i <= n && aib[ans + i] <= val)
        {
            ans += i;
            val -= aib[ans];
        }
    }
    if (val == 0 && ans)
        return ans;
    return -1;
}
void solve() {
    fin>>n>>m;
    aib=vector<int>(n+1,0);
    int x;
    for (int i=1; i<=n; i++) {
        fin>>x;
        update(i,x);
    }
    int y,z;
    for (int i=1; i<=m; i++) {
        fin>>x;
        if (x==0) {
            fin>>y>>z;
            update(y,z);
        }
        else if (x==1) {
            fin>>y>>z;
            if (y>z) {
                swap(y,z);
            }
            fout<<query(z)-query(y-1)<<'\n';
        }
        else if (x==2) {
            fin>>y;
            fout<<c2(y)<<'\n';
        }
    }
}

int main(){
    solve();
    return 0;
}