Cod sursa(job #2464)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 17 decembrie 2006 11:58:29
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
# include <stdio.h>

const int MAXN=15000;
int tree[MAXN+1]={0},n,m;

int suma(int x)
{
int sol=0;
while (x)
	{
	sol+=tree[x];
	x-=(x&(x-1))^x;
	}
return sol;
}

void update(int val, int poz,int first)
{
int q=poz;
tree[poz]-=val*(first);
while (q+((q&(q-1))^q)<=n)
	{
	q=q+((q&(q-1))^q);
	tree[q]-=val*(first);
	}
}

int main()
{
int i,a,cod,b;
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)
	{
	fscanf(f,"%d",&a);
	update(a,i,-1);
	}

for (i=1;i<=m;i++)
	{
	fscanf(f,"%d%d%d",&cod,&a,&b);
	if (cod==0) update(b,a,1);
	else fprintf(g,"%d\n",suma(b)-suma(a-1));
	}
fcloseall();
return 0;
}