Cod sursa(job #2492170)

Utilizator IATI2019Iati Shumen IATI2019 Data 14 noiembrie 2019 08:11:25
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;
int n;
int v[100001];
int aib[100001];
int query(int x){
    int sum = 0,i;
    for(i = x;i > 0;i -= i&(-i)){
        sum += aib[i];
    }
    return sum;
}
void update(int x,int val){
    int i;
    for(i = x;i <= n;i += i&(-i)){
        aib[i] += val;
    }
}
int main()
{

    ifstream cin("aib.in");
    ofstream cout("aib.out");
    int i,m;
    cin >> n >> m;
    for(i = 1;i <= n;i++){
        cin >> v[i];
        update(i,v[i]);
    }
    while(m--){
        int tip,a,b;
        cin >> tip >> a;
        if(tip == 0){
            cin >> b;
            update(a,b);
        }else if(tip == 1){
            cin >> b;
            cout << query(b) - query(a - 1) << "\n";
        }else{
            int r = 0,pas = 1 << 16;
            while(pas){
                if(r + pas <= n && query(r + pas) <= a)
                    r += pas;
                pas /= 2;
            }
            cout << r << "\n";
        }
    }
    return 0;
}