Cod sursa(job #260926)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 17 februarie 2009 18:46:19
Problema Cuburi2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#define lm 250010

int n, m, p, x, y;
long long s[lm], s2[lm], v[lm], v2[lm];

int caut (int a, int b, int k1, int k2)
{
    int m, r;
    while (a<=b)
    {
        m=(a+b)/2;
	    if (s[m]-k1>=s2[m]-k2)
	    {
	        r=m;
		    b=m-1;
        } else a=m+1;
    }
	return r;
}

int main()
{
    freopen("cuburi2.in","r",stdin);
	freopen("cuburi2.out","w",stdout);
	scanf("%d %d",&n,&m);
	int i;
	long long t=0;
	for (i=1; i<=n; i++)
	{
    	scanf("%d",&v[i]);
		t+=v[i];
    }
    for (i=1; i<=n; i++)
	{
		s[i]=s[i-1]+v[i];
		s2[i]=t-s[i];
    }
	for (i=1; i<=n; i++) v[i]=v[i-1]+s[i-1];
	for (i=n; i>0; i--) v2[i]=v2[i+1]+s2[i];
	for (i=1; i<=m; i++)
	{
		scanf("%d %d",&x,&y);
		p=caut(x,y,s[x-1],s2[y]);
		printf("%d %lld\n",p,v[p]-v[x]-s[x-1]*(p-x)+v2[p]-v2[y]-s2[y]*(y-p));
    }
}