Cod sursa(job #3040220)

Utilizator AdrianRosuRosu Adrian Andrei AdrianRosu Data 29 martie 2023 15:43:34
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define DIM 100001
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
vector <int> v(DIM);
int n, query, x, poz, val, i, task;
void Update(int i, int k){
    for(int j=i;j<=n;j += (j & -j))
        v[j] += k;
}
int solve1(int i){
    int sum = 0;
    for(int j=i;j;j -= (j & -j))
        sum += v[j];
    return sum;
}
int solve2(int k){
    int st = 1, dr = n;
    while(st <= dr){
        int mij = (st + dr) >> 1;
        int ans = solve1(mij);
        if(ans == k)
            return mij;
        else if(ans > k)
            dr = mij - 1;
        else st = mij + 1;
    }
    return -1;
}
int main(){
    fin >> n >> query;
    for(i=1;i<=n;i++){
        fin >> x;
        Update(i, x);
    }
    while(query--){
        fin >> task;
        if(task == 0){
            fin >> poz >> val;
            Update(poz, val);
        }
        else if(task == 1){
            fin >> poz >> val;
            fout << solve1(val) - solve1(poz - 1) << "\n";
        }
        else {
            fin >> poz;
            fout << solve2(poz) << "\n";
        }
    }
}