Cod sursa(job #716982)

Utilizator bluestuffPetrean Miream bluestuff Data 19 martie 2012 14:37:33
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
int n,m,A[15001],s,Z[15001];
FILE *g=fopen("datorii.out","w");

int main(void)
{
	FILE *f=fopen("datorii.in","r");
	fscanf(f,"%d%d",&n,&m);
	int i,a,b,c,j,nn,nz;
	nn=0;
	nz=0;
	long long k;
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&a);
		if(a==0)
			nz++;
		else
		{
			nn++;
			A[nn]=a;
			Z[nn]=Z[nn-1]+nz;
			nz=0;
		}
		s+=a;
	}
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d%d%d",&a,&b,&c);
		if(a==0)
		{
			A[b-Z[b]]-=c;
			s-=c;
		}
		else
		{
			k=0;
			if(b-Z[b]+1-c-Z[c]<b-Z[b]-1+n-c-Z[c])
				for(b=b-Z[b];b<=c-Z[c];b++)
					k+=A[b];
			else
			{
				for(j=1;j<b-Z[b];j++)
					k+=A[j];
				for(j=c+1-Z[c];j<=nn;j++)
					k+=A[j];
				k=s-k;
			}
			fprintf(g,"%d\n",k);
		}
	}
	fclose(g);
	return 0;
}