Cod sursa(job #3337417)

Utilizator uncrownedHojda Adelin uncrowned Data 27 ianuarie 2026 17:43:01
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

#define cin fin 
#define cout fout

int n, m;
int a[100001];
int fenwick[100001];

int query(int node) {
    int ans=0;
    for(int i = node; i > 0; i -= (i&-i)) {
        ans += fenwick[i];
    }
    return ans;
}

void update(int node, int val) {
    for(int i = node; i <= n; i += (i&-i)) {
        fenwick[i] += val;
    }
}

int main() {
    
    cin >> n >> m;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        update(i, a[i]);
    }
    for(int i = 1; i <= m; i++) {
        int op, x, b;
        cin >> op >> x;
        if (op==0) {
            cin >> b;
            update(x, b);
        } else if (op==1) {
            cin >> b;
            cout << query(b) - query(x-1) << "\n";
        } else {
            int st=1, dr=n;
            int ans=-1;
            while(st<=dr) {
                int mid = (st+dr)/2;
                int target = query(mid);
                if (target==x) {
                    ans=mid;
                    dr=mid-1;
                } else if (target<x) {
                    st=mid+1;
                } else {
                    dr=mid-1;
                }
            }
            cout << ans << "\n";
        }
    }
    
    return 0;
}