Cod sursa(job #3364267)

Utilizator dimi999Dimitriu Andrei dimi999 Data 31 august 2026 21:26:15
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
using namespace std;

fstream cin("aib.in");
ofstream cout("aib.out");

struct AIB {
    int v[100005];
    int N;

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

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

int main() {
    int N;cin >> N; int M; cin >> M;
    aib.N = N;

    for(int i = 1; i <= N; i++) {
        int val; cin >> val;
        aib.update(i, val);
    }

    for(int i = 0; i < M; i++) {
        int status; cin >> status;
        if(status == 0) {
            int poz, val; cin >> poz >> val;
            aib.update(poz, val);
        } else if(status == 1) {
            int l, r; cin >> l >> r;
            cout << aib.query(r) - aib.query(l - 1) << "\n";
        } else {
            int target; cin >> target;

            int low = 1, high = N, ans = -1;
            while(low <= high) {
                int mid = (low + high) / 2;
                int val = aib.query(mid);
                if(val >= target) {
                    if (val == target)
                        ans = mid;
                    high = mid - 1;
                } else {
                    low = mid + 1;
                }
            }
            if (ans == -1)
                cout << "Not found\n";
            else
                cout << ans << "\n";
        }
    }
}