Pagini recente » Cod sursa (job #2119328) | Cod sursa (job #1025793) | Cod sursa (job #1093633) | Cod sursa (job #1852894) | Cod sursa (job #465597)
Cod sursa(job #465597)
#include<stdio.h>
#define ll long long
ll s[250005];
ll p[250005];
int v[250005],n,m;
inline ll calc(ll& aux,int& i,int& j,int& k)
{
return (aux-2*p[k]+k*(2*s[k]-s[i-1]-s[j]));
}
int main ()
{
int i,mij,st,dr,c1,c2,sol,m2;
ll aux;
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;
aux=p[c2]+p[c1-1];
while(st<=dr)
{
mij=(st+dr)/2;
m2=mij+1;
if(calc(aux,c1,c2,mij)<=calc(aux,c1,c2,m2))
{
sol=mij;
dr=mij-1;
}
else
st=m2;
}
printf("%d %lld\n",sol,calc(aux,c1,c2,sol));
}
return 0;
}