Cod sursa(job #254683)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 7 februarie 2009 13:43:18
Problema Cuburi2 Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.06 kb
#include <stdio.h>
#define N 250005
int n,m,v[N];
void citire()
{
	int i;
	scanf("%d%d",&n,&m);
	for (i=1; i<=n; i++)
		scanf("%d",&v[i]);
}
int modul(int x,int y)
{
	if (x>y)
		return x-y;
	return y-x;
}
int operatie(int x,int y,int k)
{
	int i;
	long long s=0;
	for (i=x; i<=y; i++)
	{
		s+=v[i]*modul(i,k);
	}
	return s;
}
int calcul(int x,int y)
{
	int turn,i,pozmin=0;
	long long min;
	long long t;
	min=operatie(x,y,x);
	pozmin=x;
	for (i=x+1; i<=y; i++)
	{
		t=operatie(x,y,i);
		if (t<min)
		{
			min=t;
			pozmin=i;
		}
	}
	printf("%d %lld\n",pozmin,min);
	return 0;
}
int calcul2(int x,int y)
{
	int i,pozmin=0,s=0,sum=0;
	for (i=x; i<=y; i++)
		s+=v[i];
	for (i=x; i<=y && sum<=s/2; i++)
	{
		sum+=v[i];
		pozmin=i;
	}
	printf("%d %lld\n",pozmin,operatie(x,y,pozmin));
	return 0;
}
void rezolvare()
{
	int i,x,y;
	for (i=1; i<=m; i++)
	{
		scanf("%d%d",&x,&y);
		if (y-x<=5000 && m<=5000)
			calcul(x,y);
		else
			calcul2(x,y);
	}
}
int main()
{
	freopen("cuburi2.in","r",stdin);
	freopen("cuburi2.out","w",stdout);
	citire();
	rezolvare();
	return 0;
}