Pagini recente » Cod sursa (job #3303882) | Cod sursa (job #3305704) | Cod sursa (job #3330454) | Cod sursa (job #3311437) | Cod sursa (job #3319394)
#include <fstream>
#include <vector>
using namespace std;
using ll = long long;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
int main() {
ios::sync_with_stdio(false);
fin.tie(nullptr);
int N, M;
fin >> N >> M;
vector<ll> h(N+1), W(N+1), S(N+1);
for (int i = 1; i <= N; i++) {
fin >> h[i];
W[i] = W[i-1] + h[i];
S[i] = S[i-1] + 1LL * i * h[i];
}
while (M--) {
int x, y;
fin >> x >> y;
ll total = W[y] - W[x-1];
ll half = (total + 1) / 2;
int lo = x, hi = y, p = y;
while (lo <= hi) {
int mid = (lo + hi) / 2;
if (W[mid] - W[x-1] >= half) {
p = mid;
hi = mid - 1;
} else lo = mid + 1;
}
ll leftW = W[p] - W[x-1];
ll rightW = W[y] - W[p];
ll leftS = S[p] - S[x-1];
ll rightS = S[y] - S[p];
ll cost = p * leftW - leftS + rightS - p * rightW;
fout << p << " " << cost << "\n";
}
return 0;
}