Pagini recente » Cod sursa (job #2334096) | Cod sursa (job #132174) | Cod sursa (job #390200) | Cod sursa (job #295191) | Cod sursa (job #3040220)
#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";
}
}
}