Mai intai trebuie sa te autentifici.

Cod sursa(job #202047)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 5 august 2008 19:13:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#define N 15001
int n,m,t[3*N],a,b,poz,val,x,s;
void actual(int p,int u,int i){
	t[i]-=val;
	if(p==u){
	//	t[i]-=val;
		return;
	}
	int m=(p+u)>>1;
	if(poz<=m)
		actual(p,m,i*2);
	else
		actual(m+1,u,i*2+1);
	//t[i]=t[i*2]+t[i*2+1];
}
void actual1(int p,int u,int i){
	if(p==u) {
		t[i]=val;
		return ;
	}
	int m=(p+u)>>1;
	if(poz<=m)
		actual1(p,m,i*2);
	else
		actual1(m+1,u,i*2+1);
	t[i]=t[i*2]+t[i*2+1];
}
void suma(int p,int u,int i){
	if(a<=p && u<=b){
		s+=t[i];
		return ;
	}
	int m=(p+u)>>1;
	if(a<=m)
		suma(p,m,i*2);
	if(b>m) suma(m+1,u,i*2+1);
}
int main(){
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(poz=1;poz<=n;poz++){
		scanf("%d",&val);
		actual1(1,n,1);
	}
	for(;m;m--){
		scanf("%d%d%d",&x,&a,&b);
		if(x==1) {
			s=0;
			suma(1,n,1);
			printf("%d\n",s);
		}
		else {
			poz=a;
			val=b;
			actual(1,n,1);
		}
	}
	return 0;
}