Pagini recente » Cod sursa (job #253850) | Cod sursa (job #1831254) | Cod sursa (job #2101958) | Cod sursa (job #2666459) | Cod sursa (job #964537)
Cod sursa(job #964537)
#include <cstdio>
const int DMAX = 100003;
int N, A[DMAX], a, b;
void update_aib (int i) {
while (i <= N)
A[i] += b,
i += i & (-i);
}
int subseq_1n (int i) {
int s = 0;
while (i)
s += A[i],
i -= i & (-i);
return s;
}
int querry_02 () {
int i = 0, s = 0;
while (s < a) {
++i;
while (i + (i & (-i)) <= N && s + A[i + (i & (-i))] <= a)
i += i & (-i);
s += A[i];
}
if (s == a)
return i;
else
return -1;
}
int main () {
freopen ("aib.in", "r", stdin);
freopen ("aib.out", "w", stdout);
int M, i;
scanf ("%d%d", &N, &M);
for (i = 1; i <= N; ++i)
scanf ("%d", &b), update_aib (i);
while (M--) {
scanf ("%d", &i);
switch (i) {
case 0:
scanf ("%d%d", &a, &b);
update_aib(a);
break;
case 1:
scanf ("%d%d", &a, &b);
printf ("%d\n", subseq_1n(b) - subseq_1n(a - 1));
break;
default:
scanf ("%d", &a);
printf ("%d\n", querry_02 ());
}
}
}