Pagini recente » Cod sursa (job #1439788) | Cod sursa (job #1711789) | Cod sursa (job #497342) | Cod sursa (job #2377665) | Cod sursa (job #371761)
Cod sursa(job #371761)
using namespace std;
#include<cstdio>
#define MAX_N 250002
#define ll long long
int N;
ll A[MAX_N], S[MAX_N], SS[MAX_N], Sp[MAX_N], SSp[MAX_N];
int M;
int cbin(int x, int y)
{
int s = x, st = x, dr = y, m;
while(st <= dr)
{
m = (st+dr)>>1;
if(S[m-1] - S[x-1] < Sp[m] - Sp[y+1]) s = m, st = m+1;
else dr = m - 1;
}
return s;
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
scanf("%d%d",&N,&M);
int t,i,x,y;
ll sol;
for(i = 1; i <= N; ++i)
{
scanf("%d",&A[i]);
S[i] = S[i-1] + A[i];
SS[i] = SS[i-1] + S[i];
}
for(i = N; i > 0; --i)
{
Sp[i] = Sp[i+1] + A[i];
SSp[i] = SSp[i+1] + Sp[i];
}
while(M--)
{
scanf("%d%d",&x,&y);
t = cbin(x,y);
sol = SS[t - 1] - SS[x-1] - S[x-1] * (t - x) + SSp[t+1] - SSp[y+1] - Sp[y+1]*(y-t);
printf("%d %lld\n",t, sol);
}
return 0;
}