Pagini recente » Cod sursa (job #2514038) | Cod sursa (job #939126) | Cod sursa (job #1232054) | Cod sursa (job #2843662) | Cod sursa (job #2989905)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
const int kN = 2e5 + 5e4;
int a[1 + kN];
int64_t sum[1 + kN], coefSum[1 + kN];
int64_t getCost(int l, int r) {
if (r < l) {
return 0;
}
return coefSum[r] - coefSum[l - 1] - (sum[r] - sum[l - 1]) * (l - 1);
}
int64_t getRevCost(int l, int r) {
if (r < l) {
return 0;
}
return (sum[r] - sum[l - 1]) * (r + 1) - (coefSum[r] - coefSum[l - 1]);
}
int main() {
int n, q;
fin >> n >> q;
for (int i = 1; i <= n; ++i) {
fin >> a[i];
sum[i] = sum[i - 1] + a[i];
coefSum[i] = coefSum[i - 1] + (int64_t)i * a[i];
}
for (int i = 0; i < q; ++i) {
int st, dr;
fin >> st >> dr;
int l = st, r = dr, pos = st - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (sum[mid] - sum[st - 1] < sum[dr] - sum[mid]) {
pos = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
pos += 1;
fout << pos << ' ' << getRevCost(st, pos - 1) + getCost(pos + 1, dr) << '\n';
}
fin.close();
fout.close();
return 0;
}