Pagini recente » Cod sursa (job #2798072) | Cod sursa (job #1285370) | Cod sursa (job #1826030) | Cod sursa (job #2884809) | Cod sursa (job #1002965)
#include<stdio.h>
long long v[250002],aux[250002],sd[250002],ss[250002];
long long n,st,dr,x,y;
inline long long caut(long long l1,long long l2)
{
long long m;
st=x;dr=y;
while(st<dr)
{
m=(st+dr)/2;
if(v[m]-l1>aux[m]-l2)
dr=m;
else
st=m+1;
}
return st;
}
inline long long ch()
{
long long nr=0;
char c;
scanf("%c",&c);
while(c<='0'&&c>='9')
scanf("%c",&c);
while(c>='0'&&c<='9')
{
nr=nr*10+c-'0';
scanf("%c",&c);
}
return nr;
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
long long m,i,j,s=0,sol1,sol2;
scanf("%lld%lld\n",&n,&m);
for(i=1;i<=n;++i)
{
//scanf("%lld",&ss[i]);
ss[i]=ch();
s+=ss[i];
}
for(i=1;i<=n;++i)
{
v[i]=v[i-1]+ss[i];
aux[i]=s-v[i];
}
for(i=1;i<=n;++i)
ss[i]=ss[i-1]+v[i-1];
for(i=n;i>0;--i)
sd[i]=sd[i+1]+aux[i];
//////////////////////////////
while(m--)
{
//scanf("%lld%lld",&x,&y);
x=ch();
y=ch();
sol1=caut(v[x-1],aux[y]);
sol2=ss[sol1]-ss[x]-v[x-1]*(sol1-x)+sd[sol1]-sd[y]-aux[y]*(y-sol1);
printf("%lld %lld\n",sol1,sol2);
}
return 0;
}