Pagini recente » Cod sursa (job #1365274) | Cod sursa (job #91592) | Cod sursa (job #1535427) | Cod sursa (job #2422652) | Cod sursa (job #195605)
Cod sursa(job #195605)
#include <stdio.h>
#define N 2005
int A[N];
int p2[32],p1[N];
int n,m;
inline void update(int p,int x){
while(p<=n){
A[p]+=x;
p+=p1[p];
}
}
inline int sum(int p){
int S=0;
while(p>0){
S+=A[p];
p-=p1[p];
}
return S;
}
void prep(){
int i,k=0;
p2[0]=1;
for(i=1;i<=25;++i)
p2[i]=p2[i-1]<<1;
for(i=1;i<=n;++i){
k=0;
while(!(i&p2[k]))
k++;
p1[i]=p2[k];
}
}
void funct(int *a, int *b, int *c){
char s[64];
int j=0,x=0,y=0,z=0;
fgets(s,64,stdin);
while(s[j]>='0'&&s[j]<='9')
x=x*10+s[j++]-'0';
j++;
while(s[j]>='0'&&s[j]<='9')
y=y*10+s[j++]-'0';
j++;
while(s[j]>='0'&&s[j]<='9')
z=z*10+s[j++]-'0';
*a=x;
*b=y;
*c=z;
}
void solve(){
int t,x,y,i;
for(i=0;i<m;++i){
funct(&t,&x,&y);
if(t==0)
update(x,(-1)*y);
if(t==1)
printf("%d\n",sum(y)-sum(x-1));
}
}
int main(){
char s[N*16];
int i,j,x;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
fgets(s,64,stdin);
n=0;
m=0;
j=0;
while(s[j]>='0'&&s[j]<='9')
n=n*10+s[j++]-'0';
j++;
while(s[j]>='0'&&s[j]<='9')
m=m*10+s[j++]-'0';
prep();
fgets(s,N*16,stdin);
for(i=1,j=0;i<=n;++i,++j){
x=0;
while(s[j]>='0'&&s[j]<='9')
x=x*10+s[j++]-'0';
update(i,x);
}
solve();
fclose(stdin);
fclose(stdout);
return 0;
}