Pagini recente » Cod sursa (job #534999) | Cod sursa (job #2555171) | Cod sursa (job #2859850) | Cod sursa (job #190321) | Cod sursa (job #1955384)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int arb[100005];
int n, m, t, x, y, i;
void update(int i, int x) {
while (i <= n) {
arb[i] += x;
i += (i&-i);
}
}
int query(int i) {
int suma = 0;
while (i) {
suma+=arb[i];
i -= (i&-i);
}
return suma;
}
int main() {
f >> n >> m;
for (i = 1; i <= n; i++) {
f >> x;
update(i,x);
}
for (i = 1; i <= m; i++) {
f >> t;
if (t==0) {
f >> x >> y;
update(x,y);
} else if (t == 1) {
f >> x >> y;
g << query(y) - query(x-1) << '\n';
} else {
f >> x;
int p = 1, j = 0;
bool ok = 0;
while (p < n) p *= 2;
for (;p;p/=2) {
if (j+p>n)continue;
y = query(j+p);
if (y == x) {
ok = 1;
g<<j+p<<'\n';
break;
} else if (y<x) j+=p;
}
y = query(j);
if (ok==0) g << "-1\n";
}
}
return 0;
}