Pagini recente » Cod sursa (job #1439336) | Cod sursa (job #570173) | Cod sursa (job #1651334) | Cod sursa (job #341594) | Cod sursa (job #1955375)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
long long arb[100005];
int n, m, t, x, y, i;
void update(int i, long long x) {
while (i <= n) {
arb[i] += x;
i += (i&-i);
}
}
long long query(int i) {
long long 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;
}