Pagini recente » Cod sursa (job #1020974) | Cod sursa (job #966376) | Cod sursa (job #1565862) | Cod sursa (job #784631) | Cod sursa (job #3267066)
#include <iostream>
#include <fstream>
#include <vector>
//#include <bits/stdc++.h>
#define in fin
#define out fout
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100001];
void update(int p, int val){
while(p <= 100000){
aib[p] += val;
p += (p & -p);
}
}
int query(int p){
int s = 0;
while(p){
s += aib[p];
p -= (p & -p);
}
return s;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, q; in >> n >> q;
int v[n + 1];
for(int i = 1; i <= n; i++){
in >> v[i];
update(i, v[i]);
}
for(int i = 0; i < q; i++){
int op; in >> op;
if(op == 0){
int a, b; in >> a >> b;
update(a, b);
}else if(op == 1){
int a, b; in >> a >> b;
out << query(b) - query(a - 1) << '\n';
}else if(op == 2){
int a; in >> a;
int l = 1, r = n;
int sol = 0;
while(l <= r){
int m = (l + r) / 2;
int x = query(m);
if(x == a) sol = m;
if(x >= a) r = m - 1;
else l = m + 1;
}
out << sol << '\n';
}
}
return 0;
}