Cod sursa(job #2907904)

Utilizator moltComan Calin molt Data 31 mai 2022 21:39:47
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
	
#include<fstream>
using namespace std;
 
const int N = 1e5 + 5;
int n, q, aib[N];
 
ifstream cin("aib.in");
ofstream cout("aib.out");
 
void update(int poz, int val) {
    while (poz <= n) {
        aib[poz] += val;
        poz += (poz & -poz);
    }
}
 
int query(int poz) {
    int sum = 0;
    while (poz > 0) {
        sum += aib[poz];
        poz -= (poz & -poz);
    }
    return sum;
}
 
int main() {
    cin >> n >> q;
    int x, y, o;
    for (int i = 1; i <= n; i++) {
        cin >> x;
        update(i, x);
    }
    while (q--) {
        cin >> o;
        if (o < 2) {
            cin >> x >> y;
            if (o == 0) {
                update(x, y);
            } else 
                cout << query(y) - query (x - 1) << "\n";
        } else {
            int dr = n, st = 1, sum; 
            cin >> sum;
            while (st <= dr) {
                int mid = (st + dr) / 2;
                if (query(mid) >= sum)
                    dr = mid - 1;
                else 
                    st = mid + 1;
            }
            if (query(dr + 1) != sum)
                cout << "-1\n";
            else 
                cout << dr + 1 << "\n";
        }
    }
}