Pagini recente » Cod sursa (job #1529058) | Cod sursa (job #1936778) | Cod sursa (job #2367094) | Cod sursa (job #178896) | Cod sursa (job #818)
Cod sursa(job #818)
#include <stdio.h>
int v[15][15005];
int log2 (int x) {
int log=0, p=1;
while (p<x) { p<<=1; log++; }
return log; }
int suma (int l, int r, int n) {
if (l==r) return v[0][l];
int c=(r>>n)<<n;
if (l==c) return v[n][l>>n];
return suma (l, c-1, n-1) + suma (c, r, n-1);
}
int main() {
int n, m, i, j, a, b, c, x;
freopen ("datorii.in", "r", stdin);
freopen ("datorii.out", "w", stdout);
scanf ("%d%d", &n, &m);
for (i=0;i<n;i++) scanf ("%d", &v[0][i]);
x=log2(n);
for (i=n;i<1<<x;i++) v[0][i]=0;
for (i=1;i<=x;i++)
for (j=0;j<=(n>>i);j++)
v[i][j]=v[i-1][2*j]+v[i-1][2*j+1];
for (i=0;i<m;i++) {
scanf ("%d%d%d", &a, &b, &c);
if (a==0) {
b--;
for (j=0;j<=x;j++)
v[j][b>>j]-=c; }
else {
b--; c--;
j=c-b+1;
if (j&(j-1)==0) j=log2(j); else j=log2(j)-1;
printf ("%d\n", suma (b, c, j)); } }
return 0; }