Pagini recente » Cod sursa (job #701714) | Cod sursa (job #3286437) | Cod sursa (job #2036771) | Cod sursa (job #1682935) | Cod sursa (job #3225857)
using namespace std;
#include<iostream>
#include<fstream>
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, op, x, y;
int v[100001];
int aib[100001];
int ub(int i) {
return (i & (-i));
}
void add(int poz, int val) {
for (int i = poz; i<=n; i+=ub(i)) {
aib[i] += val;
}
}
int sum(int poz) {
int s = 0;
for (int i = poz; i>=1; i -= ub(i)) {
s += aib[i];
}
return s;
}
int main() {
fin >> n >> m;
for (int i = 1; i<=n; i++) {
fin >> v[i];
add(i, v[i]);
}
for (int i = 1; i<=m; i++) {
fin >> op;
if (op == 0) {
fin >> x >> y;
add(x, y);
} else if (op == 1) {
fin >> x >> y;
fout << sum(y) - sum(x-1) << "\n";
} else {
fin >> x;
int pozmin = n+1;
int st = 1, dr = n;
while (st <= dr) {
int mid = (st+dr)/2;
int S = sum(mid);
if (S == x) {
pozmin = min(pozmin, mid);
dr = mid-1;
} else if (S < x) {
st = mid+1;
} else {
dr = mid-1;
}
}
if (pozmin < n+1) {
fout << pozmin << "\n";
} else {
fout << "-1\n";
}
}
}
return 0;
}