Pagini recente » Cod sursa (job #2135992) | Cod sursa (job #1999411) | Cod sursa (job #252944) | Cod sursa (job #514620) | Cod sursa (job #1888628)
#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 = n+1;
for (;p;p/=2) {
if (j-p <=0)
continue;
y = sum(j-p);
if (y>=x)
j -= p;
}
if (y != x)
g << "-1\n";
else g << j << '\n';
continue;
}
}
//g << sum(n);
return 0;
}