Cod sursa(job #3319394)

Utilizator 17.emi._Tabara Emilian 17.emi._ Data 1 noiembrie 2025 09:56:58
Problema Cuburi2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;
}