Submission #666757

#TimeUsernameProblemLanguageResultExecution timeMemory
666757flappybirdCatfish Farm (IOI22_fish)C++17
100 / 100
208 ms29668 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MAX 302020 typedef long long ll; typedef pair<int, int> pii; ll tdp[MAX]; // full dp ll bdp[MAX]; // zero dp ll sum[MAX]; vector<pii> locs[MAX]; struct bit { int N; bool rev; vector<ll> tree; bit(int N, bool rev) :N(N + 2), rev(rev) { tree = vector<ll>(N + 3, -1e18); } void upd(int i, ll v) { if (rev) i = N - i - 1; i++; while (i <= N) { tree[i] = max(tree[i], v); i += i & -i; } } ll get(int i) { if (rev) i = N - i - 1; i++; ll ans = -1e18; while (i) { ans = max(ans, tree[i]); i -= i & -i; } return ans; } }; ll max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) { int i; for (auto& v : X) v++; for (auto& v : Y) v++; for (i = 0; i < M; i++) locs[X[i]].emplace_back(Y[i], W[i]); for (i = 1; i <= N; i++) if (locs[i].size()) { sort(locs[i].begin(), locs[i].end()); for (auto& [_, v] : locs[i]) sum[i] += v; } bit fenu(N, false), fend(N, true); fenu.upd(0, 0); for (i = 0; i <= N; i++) tdp[i] = bdp[i] = -1e18; for (i = 1; i <= N; i++) { tdp[i] = tdp[i - 1]; bdp[i] = bdp[i - 1]; if (i > 2) fend.upd(N + 1, tdp[i - 2]); if (i > 1) fenu.upd(0, bdp[i - 1]); if (i > 1) fend.upd(N + 1, 0); for (auto& [y, w] : locs[i]) fenu.upd(y, fenu.get(y - 1) + w); tdp[i] = max(tdp[i], fenu.get(N + 1)); for (int j = (int)locs[i].size() - 1; j >= 0; j--) { ll y = locs[i][j].first; ll w = locs[i][j].second; fend.upd(y, fend.get(y + 1) + w); } bdp[i] = max(bdp[i], fend.get(0)); if (i > 2) tdp[i] = max(tdp[i], sum[i] + tdp[i - 2]); } ll ans = fend.get(0); for (i = 1; i < N; i++) ans = max(ans, tdp[i]); for (i = 1; i <= N; i++) ans = max(ans, bdp[i]); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...