Cod sursa(job #3334322)

Utilizator den1edFarcas David den1ed Data 17 ianuarie 2026 10:39:49
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n,m;
vector<int>aib;
int lsb(int x) {
    return (x&(-x));
}

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

void update ( int idx , int val ) {
    for (; idx <= n ; idx += ( idx & - idx ) ) {
        aib [ idx ] += val ;
    }
}
int c2(int val) {
    int ans=0;
    for (int p=15; p>=0; --p) {
        if (aib[ans+2]<=val) {
            ans+=(1<<p);
            val-=aib[ans];
        }
    }
    return ans;
}
void solve() {
    fin>>n>>m;
    aib=vector<int>(n+1,0);
    int x;
    for (int i=1; i<=n; i++) {
        fin>>x;
        update(i,x);
    }
    int y,z;
    for (int i=1; i<=m; i++) {
        fin>>x;
        if (x==0) {
            fin>>y>>z;
            update(y,z);
        }
        else if (x==1) {
            fin>>y>>z;
            if (y>z) {
                swap(y,z);
            }
            cout<<query(y)-query(z-1)<<'\n';
        }
        else if (x==2) {
            fin>>y;
            cout<<c2(y)<<'\n';
        }
    }
}

int main(){
    solve();
    return 0;
}