Cod sursa(job #1020)

Utilizator mika17Mihai Alex Ionescu mika17 Data 12 decembrie 2006 14:06:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERR(d) fprintf(stderr,"%d",d)
#define Err(f,d) fprintf(stderr,f,d)
#define For(i,a,n) for(int i=(a);i<=(n);++i)
#define ABS(x) ((x)<0?-(x):(x))
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define FOR(i,n) for(int i=0;i<(n);++i)
#define ROF(i,n) for(int i=(n);i>=0;--i)
#define MAX 15000
typedef long long int64;
typedef unsigned pint;
int a[MAX+1],n,m;

void add(int,int);

void read_data(void) {
int val,i;
freopen("datorii.in","rt",stdin);
freopen("datorii.out","wt",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;++i) {
scanf("%d",&val);
add(i,val);
}
//for(i=1;i<=n;++i)
//Err("%lld ",a[i]);
}

int sum(int st) {
int s1=0;
while(st) {
s1+=a[st];
st-=st^(st-1)&st;
}
return s1;
}

void add(int ind,int val) {
while(ind<=n) {
a[ind]+=val;
ind+=ind^(ind-1)&ind;
}
}

void solve(void) {
int k,ind,v;
for(long i=0;i<m;++i)
{
scanf("%d %d %d\n",&k,&ind,&v);   //ind = indicele zilei sau ind prim elem
if(k) printf("%d\n",sum(v)-sum(ind-1));
 else add(ind,-v);
}
fclose(stdin);
fclose(stdout);
}

int main(void) {
read_data();
solve();
return 0;
}