Mai intai trebuie sa te autentifici.

Cod sursa(job #2064920)

Utilizator flaviu_2001Craciun Ioan-Flaviu flaviu_2001 Data 13 noiembrie 2017 00:05:13
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

int n, t;
int aib[100005];

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

int read(int idx)
{
    int sum = 0;
    while(idx){
        sum += aib[idx];
        idx -= (idx & (-idx));
    }
    return sum;
}

int src(int x)
{
    int m, lo = 1, hi = n, ans = 1;
    for (m = (lo+hi)/2; lo <= hi; m = (lo+hi)/2)
        if(read(m) >= x){
            ans = m;
            hi = m-1;
        }else lo = m+1;
    return ans;
}

int main()
{
    ifstream fin ("aib.in");
    ofstream fout ("aib.out");
    fin >> n >> t;
    for (int i = 1; i <= n; ++i){
        int x;
        fin >> x;
        update(i, x);
    }
    while(t--){
        int c, x, y;
        fin >> c;
        switch(c){
            case 0:
                fin >> x >> y;
                update(x, y);
                break;
            case 1:
                fin >> x >> y;
                fout << read(y)-read(x-1) << "\n";
                break;
            case 2:
                fin >> x;
                fout << src(x) << "\n";
                break;
        }
    }
    fin.close();
    fout.close();
    return 0;
}