Pagini recente » Cod sursa (job #483305) | Cod sursa (job #2210657) | Cod sursa (job #939248) | Cod sursa (job #137478) | Cod sursa (job #254246)
Cod sursa(job #254246)
#include <stdio.h>
#define MAXN 250010
#define inf 1000000000000000000LL
#define ll long long
#define C 250
#define min(a,b) (a < b ? a : b)
#define max(a,b) (a > b ? a : b)
int N, M, NR, m, P[10];
ll best;
int A[MAXN];
ll V[MAXN], V2[MAXN];
ll S[MAXN], S2[MAXN];
int main()
{
freopen("cuburi2.in" , "r", stdin);
freopen("cuburi2.out", "w", stdout);
int i, j, x, y;
long long aux;
scanf("%d %d ", &N, &M);
for (i = 1; i <= N; i++) scanf("%d ", &A[i]);
for (i = 1; i <= N; i++)
{
S[i] = S[i-1] + A[i];
V[i] = V[i-1] + S[i-1];
}
for (i = N; i >= 1; i--)
{
S2[i] = S2[i+1] + A[i];
V2[i] = V2[i+1] + S2[i+1];
}
for (j = 1; j <= M; j++)
{
scanf("%d %d ", &x, &y);
best = inf;
m = (x+y) / 2;
for (i = max(x, m-C); i <= min(y, m+C); i++)
{
aux = V[i] - (V[x-1] + S[x-1] * (i-x+1)) + V2[i] - (V2[y+1] + S2[y+1] * (y-i+1));
if (aux < best)
{
best = aux;
P[1] = i;
}
}
printf("%d %lld\n", P[1], best);
}
return 0;
}