Pagini recente » Cod sursa (job #2191347) | Cod sursa (job #2988159) | Cod sursa (job #2377508) | Cod sursa (job #3203870) | Cod sursa (job #1888638)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
long long arb[100005];
int n, m, i, j;
long long x, q, t,y;
void update(int poz, long long x) {
while (poz <= n) {
arb[poz] += x;
poz += (poz&-poz);
}
}
long long sum(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(i, x);
}
while (m--) {
f >> t >> x;
if (t <2) {
f>>y;
if (t==1)
g<<sum(y)-sum(x-1)<<'\n';
else update(x,y);
continue;
}
if (t==2) {
int p = 1;
while (p < n)
p *= 2;
j = 0;
bool ok = 0;
for (;p&&ok==0;p/=2) {
if (j+p <=0)
continue;
y = sum(j+p);
if (y == x) {
g << j+p <<'\n';
ok=1;
}
if (y<x)
j += p;
}
if (ok==0)
g << "-1\n";
continue;
}
}
//g << sum(n);
return 0;
}