Pagini recente » Monitorul de evaluare | Cod sursa (job #1400524) | Cod sursa (job #783656) | Cod sursa (job #778006) | Cod sursa (job #1773939)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define flip(a) (a&(-a))
#define MAXN 15001
#define LU (1<<17)
FILE *fin, *fout;
int arb[MAXN], n, pos, pos1;
char buff[LU], buff1[LU], ch;
inline char nextr(){
if(pos==LU){
fread(buff, LU, 1, fin);
pos=0;
}
return buff[pos++];
}
inline void read(int *x){
*x=0;
ch=nextr();
while(!isdigit(ch)) ch=nextr();
while(isdigit(ch)){
*x=(*x)*10+ch-'0';
ch=nextr();
}
}
inline void nextp(){
if(pos1==LU){
fwrite(buff1, LU, 1, fout);
pos1=0;
}
buff1[pos1++]=ch;
}
inline void print(int x){
char s[10], c=0;
while(x){
s[c++]=x%10+'0';
x/=10;
}
while(c>0){
ch=s[--c];
nextp();
}
}
inline int suma(int i){
int sum=0, j;
for(j=i; j>0; j-=flip(j))
sum+=arb[j];
return sum;
}
inline void insert(int i, int a){
int j;
for(j=i; j<=n; j+=flip(j)){
arb[j]+=a;
}
}
int main(){
int i, m, x, a, b;
fin=fopen("datorii.in", "r");
fout=fopen("datorii.out", "w");
read(&n);
read(&m);
for(i=1; i<=n; i++){
read(&x);
insert(i, x);
}
for(i=0; i<m; i++){
read(&x); read(&a); read(&b);
if(x==0)
insert(a, -b);
else{
print(suma(b)-suma(a-1));
ch='\n';
nextp();
}
}
if(pos1) fwrite(buff1, LU, 1, fout);
fclose(fin);
fclose(fout);
return 0;
}