Cod sursa(job #3372859)

Utilizator PortallosAlexandru Vladimir Portallos Data 5 noiembrie 2026 11:11:47
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

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


int n, m;

long long aib[100001];

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

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

long long binarySearch(int sum){
    int st = 1, dr = n, mid, ans;
    while (st <= dr) {
        int mid = (st + dr) / 2;

        if (query(mid) >= sum) {
            ans = mid;
            dr = mid - 1;
        } else {
            st = mid + 1;
        }
    }

    return ans;
}

int main() {

    fin>>n>>m;

    for(int i = 1; i <= n; i++){
        fin>>aib[i];
    }

    for (int i = 1; i <= n; i++) {
        int parent = i + (i & -i);
        if (parent <= n) {
            aib[parent] += aib[i];
        }
    }

    for(int i = 1; i <= m; i++){
        int c;
        fin>>c;
        if(c==0){
            int a, b;
            fin>>a>>b;
            update(a, b);
        }
        if(c==1){
            int a, b;
            fin>>a>>b;
            fout<<query(b) - query(a-1)<<"\n";
        }
        if(c==2){
            int x;
            fin>>x;
            fout<<binarySearch(x)<<"\n";
        }

    }



    return 0;
}