Pagini recente » Cod sursa (job #913798) | Cod sursa (job #452126) | Cod sursa (job #466415) | Cod sursa (job #1724839) | Cod sursa (job #749607)
Cod sursa(job #749607)
#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)) )
int N,M;
int A[Nmax];
long long S2[Nmax],S[Nmax];
long long V[Nmax],V2[Nmax];
int x,y,P;
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
scanf("%d%d",&N,&M);
for (int i=1;i<=N;++i)
scanf("%d",&A[i]);
for (int i=1;i<=N;++i)
{
S[i] = S[i-1] + A[i];
V[i] = V[i-1] + S[i-1];
}
for (int i=N;i;--i)
{
S2[i] = S2[i+1] + A[i];
V2[i] = V2[i+1] + S2[i+1];
}
for (;M;--M)
{
scanf("%d%d",&x,&y);
P = x;
int 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("%d %lld\n",P,Calc(P,x,y));
}
}