Submission #785098

#TimeUsernameProblemLanguageResultExecution timeMemory
785098QwertyPiMeetings (IOI18_meetings)C++14
19 / 100
5518 ms8056 KiB
#include "meetings.h" #include <bits/stdc++.h> #define INF (1 << 30) #define INFL (1LL << 60) #define fi first #define se second #define ll long long using namespace std; const int MAXN = 7.5e5 + 11; long long fl[MAXN], fr[MAXN]; vector<int> H; vector<long long> calc(int l, int r){ vector<long long> res(r - l + 1); vector<pair<int, int>> F; long long cost = 0; F.push_back({l - 1, INF}); for(int j = l; j <= r; j++){ while(H[j] >= F.back().se) cost -= (long long) (F.back().fi - F[F.size() - 2].fi) * F.back().se, F.pop_back(); F.push_back({j, H[j]}); cost += (long long) (F.back().fi - F[F.size() - 2].fi) * F.back().se; res[j - l] = cost; } return res; } std::vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L, std::vector<int> R) { ::H = H; int Q = L.size(); vector<ll> C(Q); for(int i = 0; i < Q; i++){ int l = L[i], r = R[i]; vector<ll> a = calc(l, r); reverse(::H.begin() + l, ::H.begin() + r + 1); vector<ll> b = calc(l, r); reverse(::H.begin() + l, ::H.begin() + r + 1); reverse(b.begin(), b.end()); long long ans = INFL; for(int i = 0; i <= r - l; i++){ ans = min(ans, a[i] + b[i] - H[l + i]); } C[i] = ans; } return C; }
#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...