Cod sursa(job #254991)

Utilizator albuaAlbu Alexandru albua Data 8 februarie 2009 12:55:17
Problema Cuburi2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <values.h>
#define DMax 250009

long v[DMax],n,m,j,i,a,b,mij,rez,front,back;
long long s[DMax],contor;
int main()
{
	freopen("cuburi2.in","r",stdin);
	freopen("cuburi2.out","w",stdout);
	scanf("%ld %ld\n",&n,&m);
	for(i=1;i<=n;i++)scanf("%ld",&v[i]);
	for(i=1;i<=n;i++)
		s[i]=s[i-1]+v[i];
	for(j=1;j<=m;j++)
		{
			contor=0;
			scanf("%ld %ld\n",&a,&b);
			front=a;
			back=b;
			rez=a;
			while(front<=back)
				{
					mij=(front+back)/2;
					if(s[mij-1]-s[a-1] < s[b]-s[mij-1])
						{
							rez=mij;
							front=mij+1;
						}
					else back=mij-1;
				}
			for(i=rez-1;i>=a;i--)
				contor=contor+ v[rez-i]*i;
			for(i=rez+1;i<=b;i++)
				contor=contor+ v[i]*(i-rez);
			
			printf("%ld %lld\n",rez,contor);
		}
  return 0;
}