Cod sursa(job #206878)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 10 septembrie 2008 15:33:55
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream.h>


int v[15002],vector[15002],a[15002];

int cst (int s, int d, int k)
	{
	if (s==d) { vector[s]=k;return a[k]=v[s];}
	     else return a[k]=cst(s,(d+s)/2,2*k)+cst((s+d)/2+1,d,2*k+1);
	}

int sum(int s, int d, int li,int ld,int k)
	{
	if (li<=s && ld>=d) return a[k];
		else if (ld<=(s+d)/2) return sum(s,(s+d)/2,li,ld,2*k);
			else if (li>(s+d)/2) return sum((s+d)/2+1,d,li,ld,2*k+1);
				else return sum(s,(s+d)/2,li,ld,2*k)+sum((s+d)/2+1,d,li,ld,2*k+1);
	}

void scade (int val,int k)
	{
	while (k>=1)
		{
		a[k]-=val;
		k/=2;
		}
	}


int main()
{
int n,m,i,j,k,A,val,t;
memset(a,sizeof(a),0);
ifstream f ("datorii.in");
f>>n>>m;
for (i=1;i<=n;i++)
	f>>v[i];
cst(1,n,1);
ofstream g("datorii.out");
for (i=1;i<=m;i++)
	{
	f>>A>>t>>val;
	if (A==0) scade(val,vector[t]);
		else g<<sum(1,n,t,val,1)<<endl;
	}
f.close();
g.close();
return 0;
}