Pagini recente » Cod sursa (job #786813) | Cod sursa (job #671950) | Cod sursa (job #939774) | Cod sursa (job #2296778) | Cod sursa (job #1955373)
#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;
while (p < n) p *= 2;
for (;p;p/=2) {
if (j+p>n)continue;
y = query(j+p);
if (query(j+p)<=x) j += p;
if (y == x) break;
}
y = query(j);
if (y != x) g << "-1\n";
else g << j << '\n';
}
}
return 0;
}