Pagini recente » Cod sursa (job #1306555) | Cod sursa (job #1306062) | Cod sursa (job #717750) | Cod sursa (job #1329450) | Cod sursa (job #465586)
Cod sursa(job #465586)
#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;
}