Pagini recente » Cod sursa (job #2928598) | Cod sursa (job #2241920) | Cod sursa (job #2825678) | Cod sursa (job #2061819) | Cod sursa (job #1125765)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
int n, m, op, a, b, x, lo, mid, hi, aib[nmax];
int sum(int idx) {
int ret = 0;
while(idx) {
ret += aib[idx];
idx -= idx & (-idx);
}
return ret;
}
void add(int idx, int val) {
while(idx < nmax) {
aib[idx] += val;
idx += idx & (-idx);
}
}
int main() {
ifstream f("aib.in");
ofstream g("aib.out");
f>>n>>m;
for(int i=1; i<=n; i++) {
f>>x;
add(i, x);
}
for(int i=1; i<=m; i++) {
f>>op>>a;
if(op == 0) f>>x, add(a, x);
if(op == 1) f>>b, g<<sum(b) - sum(a-1)<<"\n";
if(op == 2) {
lo = 0;
hi = n+1;
while(hi - lo > 1) {
mid = (lo + hi) >> 1;
if(sum(mid) < a) lo = mid;
else hi = mid;
}
g<<(sum(hi) == a? hi:-1)<<"\n";
}
}
return 0;
}