Pagini recente » Cod sursa (job #2605699) | Cod sursa (job #1700417) | Borderou de evaluare (job #3119074) | Cod sursa (job #2808338) | Cod sursa (job #911200)
Cod sursa(job #911200)
#include <stdio.h>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
int AIB[100001], N, M;
void Add(int x, int quantity) {
int i;
for (i = x; i <= N; i += zeros(i))
AIB[i] += quantity;
}
int Compute(int x){
int i, ret = 0;
for (i = x; i > 0; i -= zeros(i))
ret += AIB[i];
return ret;
}
int main() {
freopen ("aib.in", "r", stdin);
freopen ("aib.out", "w", stdout);
int i, opt, a, b, x;
scanf ("%d %d", &N, &M);
for (i = 1; i <= N; ++i) {
scanf ("%d", &x);
Add(i, x);
}
for (i = 1; i <= M; ++i) {
scanf ("%d", &opt);
if (opt == 0) {
scanf ("%d %d", &a, &b);
Add (a, b);
}
if (opt == 1) {
scanf ("%d %d", &a, &b);
printf ("%d\n", Compute(b) - Compute(a-1));
}
if (opt == 2) {
scanf ("%d", &a);
b = 1;
while (Compute(b) != a) ++b;
printf ("%d\n", b);
}
}
return 0;
}