Pagini recente » Cod sursa (job #2488325) | Cod sursa (job #1241748) | Cod sursa (job #448580) | Cod sursa (job #1435809) | Cod sursa (job #465589)
Cod sursa(job #465589)
#include<stdio.h>
#define ll long long
ll s[250005];
ll p[250005];
int v[250005],n,m;
int main ()
{
int i,mij,st,dr,c1,c2,sol;
ll v1,v2;
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
{
s[i]=s[i-1]+v[i];
p[i]=p[i-1]+(ll)v[i]*i;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&c1,&c2);
st=c1;
dr=c2;sol=n;
while(st<=dr)
{
mij=(st+dr)/2;
v1=p[c2]+p[c1-1]-2*p[mij]+mij*(2*s[mij]-s[c1-1]-s[c2]);
v2=p[c2]+p[c1-1]-2*p[mij+1]+(mij+1)*(2*s[mij+1]-s[c1-1]-s[c2]);
if(v1<v2)
{
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
v1=p[c2]+p[c1-1]-2*p[sol]+sol*(2*s[sol]-s[c1-1]-s[c2]);
printf("%d %lld\n",sol,v1);
}
return 0;
}