Submission #1233764

#TimeUsernameProblemLanguageResultExecution timeMemory
1233764jonatas57Colouring a rectangle (eJOI19_colouring)C++20
10 / 100
92 ms16028 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<bool> vb; typedef pair<int, int> ii; const int INF = 0x3f3f3f3f; const ll INFLL = 0x3f3f3f3f3f3f3f3fll; #define each(x, s) for (auto& x : s) #define loop(x) for (int i = 0;i < x;i++) #define vloop(v, x) for (int v = 0;v < x;v++) #define iter(a) a.begin(), a.end() #define riter(a) a.rbegin(), a.rend() #define endl "\n" int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int m, n; cin >> n >> m; int d = n + m - 1; vector<ll> a(d), b(d); each(x, b) cin >> x; each(x, a) cin >> x; vector<tuple<int, int, ll>> is; loop(d) { int minr = max(0, i - m + 1); int maxr = min(i, n - 1); int maxc = i - minr; int minc = i - maxr; is.emplace_back(minr - maxc + m - 1, maxr - minc + m - 1, a[i]); } sort(iter(is)); loop(d - 2) b[i + 2] += b[i]; auto get = [&] (int l, int r) { return b[r] - (l - 2 >= 0 ? b[l - 2] : 0); }; vector<ll> dp(d + 1, 0); int b0 = -2, b1 = -1; loop(d) { auto& [l, r, x] = is[i]; ll y = get(max(l, i & 1 ? b1 : b0), r); if (x <= y) dp[i + 1] = dp[i] + x; else { dp[i + 1] = dp[i] + y; b1 = r; } swap(b0, b1); } cout << dp[d] << endl; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...