Pagini recente » Cod sursa (job #2260493) | Cod sursa (job #1488833) | Cod sursa (job #1532752) | Cod sursa (job #1079655) | Cod sursa (job #1472325)
#include<stdio.h>
#include<algorithm>
#define maxn 250005
#define maxb 8192
using namespace std;
#define nxt if(++pos==maxb) fread(buff,1,maxb,stdin),pos=0
int n,m;
int a[maxn];
long long s[maxn],L[maxn],R[maxn];
char buff[maxb];
int pos=0;
int get()
{
int nr=0;
while(buff[pos]<'0' || buff[pos]>'9') nxt;
while(buff[pos]>='0' && buff[pos]<='9'){
nr=nr*10+buff[pos]-'0';
nxt;
}
return nr;
}
void read()
{
n=get(); m=get();
for(int i=1;i<=n;i++)
a[i]=get();
}
int check(int x,int y)
{
int i,step,sol;
for(step=1;step<y-x+1;step<<=1);
for(i=x-1;step;step>>=1)
if(i+step<=y)
{
if(s[i+step]-s[x-1]>=s[y]-s[i+step])
sol=i+step;
else
i+=step;
}
return sol;
}
void solve()
{
for(int i=1;i<=n;i++)
{
s[i]=s[i-1]+a[i];
L[i]=L[i-1]+s[i-1];
}
for(int i=n;i;i--)
R[i]=R[i+1]+s[n]-s[i];
int x,y,pos;
long long res;
for(;m;m--)
{
x=get(); y=get();
pos=check(x,y);
res=L[pos]-L[x-1]-1LL*(pos-x+1)*s[x-1];
res=res+R[pos]-R[y+1]-1LL*(y-pos+1)*(s[n]-s[y]);
printf("%d %lld\n",pos,res);
}
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
read();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}