Cod sursa(job #254410)

Utilizator alexeiIacob Radu alexei Data 7 februarie 2009 11:58:27
Problema Cuburi2 Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.47 kb
#include<stdio.h>
#define NMAX 5001

int A[NMAX],B[NMAX],S1[NMAX],S2[NMAX];
int V[NMAX];
int N,M;
char sir[ 1000000 ];

void reading()
{
	scanf("%d%d\n",&N,&M);
	
	fgets( sir, sizeof( sir ), stdin );

	int i=1,j,aux=0;

	for( j=0; sir[ j ]!='\n'; ++j )
	{	
		if( sir[j]==' ' )
		{	
			V[i]=aux;S1[i]=V[i]+S1[i-1];
			aux=0;++i;
		}
		else
		{
			aux*=10;
			aux+=(sir[j]-'0');
		}
	}
	V[i]=aux;S1[i]=V[i]+S1[i-1];

/*
	for(i=1; i<=N; ++i)
	{
		scanf("%d",&V[i]);
		S1[i]=S1[i-1]+V[i];
	}
	
	for(i=N; i>=1; --i)
	{
		S2[i]=S2[i+1]+V[i];
	}
*/
}

void init()//aveam un arbore de intervale in gand
{
	int i,j;
	for(i=1; i<=N; ++i,++j)
		A[i]=A[i-1]+S1[i-1];
	
	for(i=N; i>=1; --i)
		B[i]=B[i+1]+S2[i+1];
	
	/*
	for(i=1; i<=N; ++i)
	{
		update()*/

}

void za_brute()//you have to hate them and love them
{
	long long ANS,POS;
	int i;
	int a1,a2;
	while( M-- )
	{
		scanf("%d%d\n",&a1,&a2);
		
		ANS=0x3f3f3f3f;POS=-1;

		A[ a1-1 ]=0;S1[ a1-1 ]=0;
		B[ a2+1 ]=0;S2[ a2+1 ]=0;

		for( i=a1; i<=a2; ++i)
		{
			A[ i ]=A[ i-1 ]+S1[i-1];
			S1[i]=S1[i-1]+V[i];
		}
		for( i=a2; i>=a1; --i)
		{
			B[ i ]=B[ i+1 ]+S2[i+1];
			S2[i]=S2[i+1]+V[i];

			if( (long long)A[i]+B[i]<ANS )
			{
				ANS=(long long)A[i]+B[i];
				POS=i;
			}
		}
		printf("%lld %lld\n",POS,ANS);
	}
}
	

int main()
{
	freopen("cuburi2.in","r",stdin);
	freopen("cuburi2.out","w",stdout);
	
	reading();
	//init();
	za_brute();

	return 0;
}