Pagini recente » Cod sursa (job #1749719) | Cod sursa (job #1741807) | Cod sursa (job #1786909) | Cod sursa (job #1613123) | Cod sursa (job #1914475)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int arb[100005], n, m, i, j, x, y, t;
void update(int x, int poz) {
while (poz <= n) {
arb[poz] += x;
poz += (poz & -poz);
}
}
int suma(int poz) {
int s = 0;
while (poz > 0) {
s += arb[poz];
poz -= (poz & -poz);
}
return s;
}
int main() {
f >> n >> m;
for (i = 1; i <= n; i++) {
f >> x;
update(x, i);
}
while (m--) {
f >> t >> x;
if (t <2) {
f>>y;
if (t==0)
update(y,x);
else g << suma(y)-suma(x-1)<<'\n';
} else {
int p = 1, k;
while (p < n) p *= 2;
for (i = 0; p; p /= 2) {
if (i+p > n)
continue;
k = suma(i+p);
if (k == x) {
g << i+p << '\n';
k = -111;
break;
} else if (k < x)
i += p;
}
if (k != -111)
g << "-1\n";
}
}
return 0;
}