Pagini recente » Cod sursa (job #575896) | Cod sursa (job #2380597) | Cod sursa (job #939123) | Cod sursa (job #1239983) | Cod sursa (job #749605)
Cod sursa(job #749605)
#include <cstdio>
using namespace std;
#define Nmax 250011
#define Calc(P,x,y) ( V[P] - (V[x-1] + S[x-1] * (P-x+1)) + V2[P] - (V2[y+1] + S2[y+1] * (y-P+1)) )
long long N,M;
long long A[Nmax],S2[Nmax],S[Nmax];
long long V[Nmax],V2[Nmax];
long long x,y,P;
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
scanf("%lld%lld",&N,&M);
for (long long i=1;i<=N;++i)
scanf("%lld",&A[i]);
for (long long i=1;i<=N;++i)
{
S[i] = S[i-1] + A[i];
V[i] = V[i-1] + S[i-1];
}
for (long long i=N;i;--i)
{
S2[i] = S2[i+1] + A[i];
V2[i] = V2[i+1] + S2[i+1];
}
for (;M;--M)
{
scanf("%lld%lld",&x,&y);
P = x;
long long front=x, back=y , middle=0 ;
while (front <= back)
{
middle = (front + back) / 2;
if (S[middle-1] - S[x-1] < S[y] - S[middle-1])
{
front = middle + 1;
P = middle;
}
else back = middle - 1;
}
printf("%lld %lld\n",P,Calc(P,x,y));
}
}