Pagini recente » Cod sursa (job #2700170) | Cod sursa (job #2580054) | Cod sursa (job #735826) | Cod sursa (job #1065317) | Cod sursa (job #1503752)
#include <stdio.h>
#include <math.h>
#define MAXN 250010
#define long long long
long n, m, i, x, cat, y, a[MAXN], v1[MAXN], v2[MAXN], v3[MAXN], v4[MAXN];
void show(long num) {
long st = v2[num] - (v2[x - 1] + v1[x - 1] * (num - x + 1));
long dr = v4[num] - (v4[y + 1] + v3[y + 1] * (y - num + 1));
printf("%lld\n", st + dr);
}
long caut_ternara(long i1, long i2, long sol) {
long mid = (i1 + i2) / 2;
while (i1 <= i2) {
mid = (i1 + i2) / 2;
if (v1[y] - v1[mid - 1] > v1[mid - 1] - v1[x - 1] ) {
sol = mid;
i1 = mid + 1;
} else {
i2 = mid - 1;
}
}
return sol;
}
int main() {
freopen("cuburi2.in", "r", stdin);
freopen("cuburi2.out", "w", stdout);
scanf("%lld %lld", &n, &m);
for (i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
v1[i] = v1[i - 1] + a[i];
v2[i] = v2[i - 1] + v1[i - 1];
}
for (i = n; i >= 1; --i) {
v3[i] = v3[i + 1] + a[i];
v4[i] = v4[i + 1] + v3[i + 1];
}
for (i = 1; i <= m; ++i) {
scanf("%lld %lld", &x, &y);
cat = caut_ternara(x, y, x);
printf("%lld ", cat);
show(cat);
}
return 0;
}