Cod sursa(job #341223)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 17 august 2009 19:25:09
Problema Cuburi2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define N 250005
long long n,m,v[N];
long long sum[N],sum2[N],sum3[N];
long long x,y,poz;
void precalculate()
{
	long long i;
	for (i=1; i<=n; i++)
	{
		scanf("%lld",&v[i]);
		sum[i]=sum[i-1]+v[i];
		sum2[i]=sum2[i-1]+sum[i-1];
	}
	for (i=n; i>=1;i--)
		sum3[i]=sum3[i+1]+sum[n]-sum[i];
}
void cbin()
{
	long long st=x,dr=y,t;
	while (st<=dr)
	{
		t=(st+dr)/2;
		if (sum[t-1]-sum[x-1]<sum[y]-sum[t-1])
		{
			st=t+1;
			poz=t;
		}
		else
			dr=t-1;
	}
}
int main()
{
	freopen("cuburi2.in","r",stdin);
	freopen("cuburi2.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	precalculate();
	long long i,t,rez;
	for (i=1; i<=m; i++)
	{
		scanf("%lld%lld",&x,&y);
		poz=x;
		cbin();
		t=poz;
		rez=sum2[t]-sum2[x]-sum[x-1]*(t-x);
		rez+=sum3[t]-sum3[y]-(sum[n]-sum[y])*(y-t);
		printf("%lld ",t);
		printf("%lld\n",rez);
	}
	return 0;
}