Cod sursa(job #3267066)

Utilizator iulia_morariuIuli Morariu iulia_morariu Data 11 ianuarie 2025 09:10:17
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
//#include <bits/stdc++.h>
#define in fin
#define out fout

using namespace std;

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

int aib[100001];

void update(int p, int val){
    while(p <= 100000){
        aib[p] += val;
        p += (p & -p);
    }
}

int query(int p){
    int s = 0;
    while(p){
        s += aib[p];
        p -= (p & -p);
    }
    return s;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, q; in >> n >> q;
    int v[n + 1];
    for(int i = 1; i <= n; i++){
        in >> v[i];
        update(i, v[i]);
    }

    for(int i = 0; i < q; i++){
        int op; in >> op;
        if(op == 0){
            int a, b; in >> a >> b;
            update(a, b);
        }else if(op == 1){
            int a, b; in >> a >> b;
            out << query(b) - query(a - 1) << '\n';
        }else if(op == 2){
            int a; in >> a;
            int l = 1, r = n;
            int sol = 0;
            while(l <= r){
                int m = (l + r) / 2;
                int x = query(m);
                if(x == a) sol = m;
                if(x >= a) r = m - 1;
                else l = m + 1;
            }
            out << sol << '\n';
        }
    }

    return 0;
}