제출 #763993

#제출 시각아이디문제언어결과실행 시간메모리
763993t6twotwoMeetings (IOI18_meetings)C++17
19 / 100
494 ms786432 KiB
#include "meetings.h" #include <bits/stdc++.h> using namespace std; using ll = long long; constexpr ll inf = 1e18; vector<ll> minimum_costs(vector<int> H, vector<int> L, vector<int> R) { int N = H.size(), Q = L.size(); if (N <= 5000 && Q <= 5000) { vector<ll> ans(Q, inf); for (int i = 0; i < Q; i++) { vector<int> stk; vector<ll> A(N); for (int j = L[i]; j <= R[i]; j++) { while (!stk.empty() && H[stk.back()] <= H[j]) { stk.pop_back(); } if (stk.empty()) { A[j] = 1LL * H[j] * (j - (L[i] - 1)); } else { A[j] = 1LL * H[j] * (j - stk.back()) + A[stk.back()]; } stk.push_back(j); } stk.clear(); vector<ll> B(N); for (int j = R[i]; j >= L[i]; j--) { while (!stk.empty() && H[stk.back()] <= H[j]) { stk.pop_back(); } if (stk.empty()) { B[j] = 1LL * H[j] * ((R[i] + 1) - j); } else { B[j] = 1LL * H[j] * (stk.back() - j) + B[stk.back()]; } stk.push_back(j); } for (int j = L[i]; j <= R[i]; j++) { ans[i] = min(ans[i], A[j] + B[j] - H[j]); } } return ans; } vector<int> L2(N); for (int i = 0; i < N; i++) { L2[i] = H[i] == 2 ? i : i == 0 ? -1 : L2[i - 1]; } vector<int> R2(N); for (int i = N - 1; i >= 0; i--) { R2[i] = H[i] == 2 ? i : i == N - 1 ? N : R2[i + 1]; } vector mx(N, vector<int>(N)); for (int i = 0; i < N; i++) { for (int j = i, k = -1; j < N; j++) { if (j > i) { mx[i][j] = mx[i][j - 1]; } if (H[j] == 2) { if (k != -1) { mx[i][j] = max(mx[i][j], j - k); } k = j; } } } vector<ll> ans(Q); for (int i = 0; i < Q; i++) { int T = R[i] - L[i] + 1; if (R2[L[i]] > R[i]) { ans[i] = T; continue; } ans[i] = 2 * T; ans[i] = min(ans[i], 2ll * T - R2[L[i]] + L[i]); ans[i] = min(ans[i], 2ll * T - R[i] + L2[R[i]]); ans[i] = min(ans[i], 2ll * T - mx[L[i]][R[i]] + 1); } 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...