Cod sursa(job #254591)

Utilizator lamez0rBogdan Bondor lamez0r Data 7 februarie 2009 13:07:44
Problema Cuburi2 Scor 20
Compilator c Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 0.87 kb
#include<stdio.h>
long n,m,h[250001];
long long v[250001],w[250001];
FILE *g;

void solve (long x, long y)
	{
	long cub,i,j;
	long long min;
	v[x]=h[x];
	for (i=x+1;i<=y-1;++i)
		for (j=x;j<=i;++j)
			v[i]+=h[j]*(i-j+1);
	for (i=y-1;i>=x;--i)
		for (j=y;j>=i+1;--j)
			w[i]+=h[j]*(j-i);
	min=w[x];
	cub=x;
	for (i=x+1;i<=y-1;++i)
		if (v[i-1]+w[i]<min)
			{
			min=v[i-1]+w[i];
			cub=i;
			}
	if (v[y-1]<min)
		{
		min=v[y-1];
		cub=y;
		}
	fprintf(g,"%ld %lld\n",cub,min);
	}

void read ()
	{
	FILE *f=fopen("cuburi2.in","r");
	fscanf(f,"%ld%ld",&n,&m);
	long x,y,i,j;
	for (i=1;i<=n;++i)
		fscanf(f,"%ld",&h[i]);
	for (i=1;i<=m;++i)
		{
		fscanf(f,"%ld%ld",&x,&y);
		for (j=1;j<=n;++j)
			{
			v[j]=0;
			w[j]=0;
			}
		solve (x,y);
		}
	fclose(f);
	fclose(g);
	}

int main ()
{
g=fopen("cuburi2.out","w");
read ();
return 0;
}