제출 #1162028

#제출 시각아이디문제언어결과실행 시간메모리
1162028HanksburgerTeam Contest (JOI22_team)C++20
100 / 100
205 ms20980 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ordered_set tree<pair<pair<int, int>, int>, null_type, greater<pair<pair<int, int>, int> >, rb_tree_tag, tree_order_statistics_node_update> using namespace std; using namespace __gnu_pbds; vector<pair<int, pair<int, int> > > beavers; ordered_set set1, set2; signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, lastUpdated=0, ans=-1; cin >> n; for (int i=0; i<n; i++) { int x, y, z; cin >> x >> y >> z; beavers.push_back({x, {y, z}}); } sort(beavers.begin(), beavers.end()); for (int i=1; i<n; i++) { if (beavers[i-1].first!=beavers[i].first) { for (int j=lastUpdated; j<i; j++) { int y=beavers[j].second.first, z=beavers[j].second.second; pair<pair<int, int>, int> val1={{y, z}, j}, val2={{z, y}, j}; int rank1=set1.order_of_key(val1), rank2=set2.order_of_key(val2); if (!set1.empty() && (*(--set1.end())).second!=(*(--set2.end())).second && rank1+2>set1.size() && rank2+2>set2.size()) continue; if (rank1==rank2) { set1.insert(val1); set2.insert(val2); continue; } if (rank1<rank2) { if (rank1+2==set1.size()) { int ind=(*(--set2.end())).second; set1.erase({{beavers[ind].second.first, beavers[ind].second.second}, ind}); set2.erase({{beavers[ind].second.second, beavers[ind].second.first}, ind}); } while (set1.size()>rank1+1) { int ind=(*(--set1.end())).second; set1.erase({{beavers[ind].second.first, beavers[ind].second.second}, ind}); set2.erase({{beavers[ind].second.second, beavers[ind].second.first}, ind}); } set1.insert(val1); set2.insert(val2); } else { if (rank2+2==set1.size()) { int ind=(*(--set1.end())).second; set1.erase({{beavers[ind].second.first, beavers[ind].second.second}, ind}); set2.erase({{beavers[ind].second.second, beavers[ind].second.first}, ind}); } while (set2.size()>rank2+1) { int ind=(*(--set2.end())).second; set1.erase({{beavers[ind].second.first, beavers[ind].second.second}, ind}); set2.erase({{beavers[ind].second.second, beavers[ind].second.first}, ind}); } set1.insert(val1); set2.insert(val2); } } lastUpdated=i; } if (set1.empty()) continue; int ind1=(*(--set1.end())).second; int ind2=(*(--set2.end())).second; if (ind1!=ind2 && beavers[ind1].second.second>beavers[i].second.second && beavers[ind2].second.first>beavers[i].second.first) ans=max(ans, beavers[i].first+beavers[ind1].second.second+beavers[ind2].second.first); } cout << 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...