Pagini recente » Cod sursa (job #2006375) | Cod sursa (job #1845740) | Cod sursa (job #2067072) | exemplu1 | Cod sursa (job #12948)
Cod sursa(job #12948)
#include <cstdio>
#define FIN "datorii.in"
#define FOUT "datorii.out"
#define MAXN 15001
long long a[MAXN];
long n, m, i, j, x, y, cod;
void aduna(long ind, long x) {
int poz = 0;
while (ind <= n) {
a[ind] += x;
while (!(ind & (1<<poz))) poz++;
ind += (1<<poz);
poz++;
}
}
void suma(long st, long dr) {
int poz = 0;
long long s1 = 0, s2 = 0;
while (dr > 0) {
s1 += a[dr];
while (!(dr & (1<<poz))) poz++;
dr -= (1<<poz);
poz++;
}
st--;
poz = 0;
while (st > 0) {
s2 += a[st];
while (!(st & (1<<poz))) poz++;
st -= (1<<poz);
poz++;
}
printf("%lld\n", (s1-s2));
}
int main () {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%ld %ld", &n, &m);
for (i=1; i<=n; i++) {
scanf("%ld", &x);
aduna(i, x);
}
for (i=1; i<=m; i++) {
scanf("%ld %ld %ld", &cod, &x, &y);
if (cod) suma(x, y);
else aduna(x, -y);
}
return 0;
}