Pagini recente » Cod sursa (job #734051) | Cod sursa (job #601414) | Cod sursa (job #2610798) | Cod sursa (job #2100196) | Cod sursa (job #2005682)
#include<cstdio>
using namespace std;
const int nmax=1e5+5;
int n,q;
int v[nmax];
long long sp[nmax],mdr[nmax],mst[nmax];
inline long long sum(int a,int b)
{
return sp[b]-sp[a-1];
}
inline void pre()
{
int i;
for(i=1;i<=n;++i)
sp[i]=sp[i-1]+1LL*v[i];
for(i=1;i<=n;++i)
mst[i]=mst[i-1]+sp[i-1];
for(i=n;i;--i)
mdr[i]=mdr[i+1] + sum(i+1,n);
}
inline int bsearch(int x,int y)
{
int i,step;
for(step=1;step<=y-x;step<<=1);
for(i=x;step;step>>=1)
if(i+step <= y && sum(x,i+step-1) < sum(i+step , y))
i+=step;
return i;
}
inline void solve(int x,int y)
{
int poz=bsearch(x,y);
printf("%d %lld\n",poz,(mst[poz] - mst[x] - mst[x-1]*(poz-x) + mdr[poz] - mdr[y] - sum(y+1,n)*(y-poz)));
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
int i;
scanf("%d%d",&n,&q);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
pre();
int x,y;
while(q--)
{
scanf("%d%d",&x,&y);
solve(x,y);
}
}