Submission #707317

#TimeUsernameProblemLanguageResultExecution timeMemory
707317MohammadAbduljalilArt Exhibition (JOI18_art)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; int main() { ll n; cin >> n; vector<pair<ll, ll>> art(n); vector<ll> prefix(n); for (int i = 0; i < n; i++) { cin >> art[i].first >> art[i].second; } sort(art.begin(),art.end()); prefix[0] = art[0].second; for(int i = 1; i < n; i++) prefix[i] = prefix[i-1] + art[i].second; ll fm = 0, mx = -1e18, total = 0, idx = 0; for (int i = 0; i < n; i++) { total += art[i].second; if (total - art[i].first >= mx) { mx = total - art[i].first; fm = art[i].first; idx = i; } } ll mini = -1e18; total = 0; for (int i = idx; i >= 0; i--) { if(i - 1 >= 0) total = prefix[idx] - prefix[i-1]; else total = prefix[idx]; if (total - fm + art[i].first >= mini) mini = total - fm + art[i].first; } ll trial2 = -1e18, sm = 0, idx2 = 0; total = 0; for(int i = 0; i < n; i++) { if(i - 1 >= 0) total = prefix[n-1] - prefix[i-1]; else total = prefix[n-1]; if(total + art[i].first > trial2) { trial2 = total - art[i].first; sm = art[i].first; idx2 = i; } } total = 0; ll ans2 = -1e18; for (int i = idx2; i < n; i++) { if(idx2 - 1 >= 0) total = prefix[i] - prefix[idx2-1]; else total = prefix[i]; if (total - art[i].first + sm >= ans2) ans2 = total - art[i].first + sm; } total = 0; ll ans3 = -1e18; for (int i = 0; i < n; i++) { if(i - 1 >= 0) total = prefix[n-1] - prefix[i-1]; else total = prefix[n-1]; if (total - art[n-1].first + art[i].first >= ans3) ans3 = total - art[n-1].first + art[i].first; } for (int i = 0; i < n; i++) if(art[i].second > mini) mini = art[i].second; cout << max({mini, ans2, ans3}); 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...