제출 #1191290

#제출 시각아이디문제언어결과실행 시간메모리
1191290MatteoArcari모임들 (IOI18_meetings)C++20
19 / 100
5589 ms4932 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll Inf = 1e18;

vector<ll> minimum_costs(vector<int> h, vector<int> l, vector<int> r) {
    int q = l.size();
    int n = h.size();
    vector<ll> ans(q, Inf);
    vector<ll> pre(n), suf(n);

    for (int i = 0; i < q; i++) {
        {
            ll sum = 0;
            deque<pair<ll, ll>> q;
            for (int j = l[i]; j <= r[i]; j++) {
                ll cnt = 1;
                while (!q.empty() && q.front().first <= h[j]) {
                    cnt += q.front().second;
                    sum -= q.front().first * q.front().second;
                    q.pop_front();
                }
                sum += cnt * h[j];
                q.push_front({h[j], cnt});
                pre[j] = sum;
            }
        }
        {
            ll sum = 0;
            deque<pair<ll, ll>> q;
            for (int j = r[i]; j >= l[i]; j--) {
                ll cnt = 1;
                while (!q.empty() && q.front().first <= h[j]) {
                    cnt += q.front().second;
                    sum -= q.front().first * q.front().second;
                    q.pop_front();
                }
                sum += cnt * h[j];
                q.push_front({h[j], cnt});
                suf[j] = sum;
            }
        }

        for (int j = l[i]; j <= r[i]; j++) {
            ans[i] = min(ans[i], pre[j] + suf[j] - h[j]);
        }
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...