Submission #886033

#TimeUsernameProblemLanguageResultExecution timeMemory
886033thinknoexitCatfish Farm (IOI22_fish)C++17
0 / 100
112 ms19200 KiB
#include <bits/stdc++.h> #include "fish.h" using namespace std; using ll = long long; struct A { int v, w; ll ans; bool operator < (const A& o) const { return v < o.v; } }; vector<A> pos[100100]; int n, m; ll max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) { for (int i = 0;i < M;i++) { pos[X[i] + 1].push_back({ Y[i] + 1, W[i], 0ll }); } pos[1].push_back({ 0, 0, 0ll }); pos[1].push_back({ N + 1, 0, 0ll }); sort(pos[1].begin(), pos[1].end()); ll ans = 0; for (int i = 2;i <= N;i++) { pos[i].push_back({ 0, 0, 0 }); pos[i].push_back({ N + 1, 0, 0ll }); sort(pos[i].begin(), pos[i].end()); int n = pos[i - 1].size(), m = pos[i].size(); // a[i-1] <= a[i] ll sum = 0; ll mx = 0; for (int j = 0, p = 0;j < m;j++) { while (p < n && pos[i - 1][p].v <= pos[i][j].v) { sum += pos[i - 1][p].w; mx = max(mx, pos[i - 1][p].ans - sum); p++; } pos[i][j].ans = max(pos[i][j].ans, sum + mx); ans = max(ans, pos[i][j].ans); } // a[i-1] > a[i] sum = 0; mx = 0; for (int j = m - 1, p = n - 1;j >= 0;j--) { while (p >= 0 && pos[i - 1][p].v > pos[i][j].v) { mx = max(mx, pos[i - 1][p].ans - sum); p--; } pos[i][j].ans = max(pos[i][j].ans, sum + mx); ans = max(ans, pos[i][j].ans); sum += pos[i][j].w; } } 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...