Pagini recente » Cod sursa (job #2171319) | Cod sursa (job #2943166) | Cod sursa (job #1633711) | Cod sursa (job #27717) | Cod sursa (job #467508)
Cod sursa(job #467508)
#include<stdio.h>
#include<string.h>
#define ll long long
ll s[250005];
ll p[250005];
int n,m,nr,poz;
char ch[105];
inline ll calc(int& i,int& j,int& k)
{
return (-2*p[k]+k*(2*s[k]-s[i-1]-s[j]));
}
int main ()
{
int i,mij,st,dr,c1,c2,sol,m2,v;
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);
s[i]=s[i-1]+v;
p[i]=p[i-1]+(ll)v*i;
}
scanf("\n");
for(i=1;i<=m;i++)
{
gets(ch);c1=0;
nr=strlen(ch);
poz=0;c2=0;
while(ch[poz]!=' ')
{
c1*=10;
c1+=(ch[poz]-'0');
poz++;
}
poz++;
while(poz<nr)
{
c2*=10;
c2+=(ch[poz]-'0');
poz++;
}
st=c1;
dr=c2;sol=n;
aux=p[c2]+p[c1-1];
while(st<=dr)
{
mij=(st+dr)/2;
m2=mij+1;
if(calc(c1,c2,mij)<=calc(c1,c2,m2))
{
sol=mij;
dr=mij-1;
}
else
st=m2;
}
printf("%d %lld\n",sol,aux+calc(c1,c2,sol));
}
return 0;
}