Pagini recente » Cod sursa (job #1449843) | Cod sursa (job #2269085) | Cod sursa (job #1387882) | Statistici Victor Ghita (TomiGhita) | Cod sursa (job #819417)
Cod sursa(job #819417)
#include<cstdio>
#include<cstring>
#define ll long long
int n,m,x,y,st,dr,st2,dr2;
ll sum[250007],s[250007],a[250007],b[250007];
inline int cb(ll k1,ll k2)
{
int med=0, last=0;
while (st < dr)
{
med = (dr + st) / 2;
if (sum[med] - k1 >= s[med] - k2)
dr = med;
else
st = med + 1;
}
return st;
}
long parsare()
{
char s[10];
memset(s,0,sizeof(s));
long k=0;
scanf("%s",s);
for (int i=strlen(s)-1;i>=0;--i)
k=k*10+s[i]-'0';
return k;
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
n=parsare();
scanf(" ");
m=parsare();
scanf("\n");
ll max=0,min=0,min2;
for (int i=1;i<=n;++i)
{
a[i]=parsare();
scanf(" ");
max+=a[i];
}
scanf("\n");
//sume partiale
for (int i=1;i<=n;++i)
{
sum[i]=sum[i-1]+a[i];
s[i]=max-sum[i];
}
for (int i=1;i<=n;++i)
a[i]=a[i-1]+sum[i-1];
for (int i=n;i>0;--i)
b[i]=b[i+1]+s[i];
for (int i=1;i<=m;i++)
{
st=parsare();
scanf(" ");
dr=parsare();
scanf("\n");
st2=st;
dr2=dr;
min=cb(sum[st2-1],s[dr2]);
st=st2;
dr=dr2;
min2=(ll)a[min]-a[st]-sum[st-1]*(min-st)+b[min]-b[dr]-s[dr]*(dr-min);
printf("%d ",min);
printf("%lld\n",min2);
}
}