제출 #1198607

#제출 시각아이디문제언어결과실행 시간메모리
1198607tawwieArt Exhibition (JOI18_art)C++20
100 / 100
142 ms15952 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ cin.tie(NULL)->ios_base::sync_with_stdio(false); int n; cin >> n; vector<pair<ll, ll>> v(n+1); // pval = prefix sum val for(int i=1; i<=n; i++){ ll a, b; cin >> a >> b; v[i] = {a, b}; } sort(v.begin(), v.end()); vector<ll> pval(n+1, 0), sz(n+1, 0); for(int i=1; i<=n; i++){ sz[i] = v[i].first; pval[i] = pval[i-1] + v[i].second; } /* idea: work in ranges, if a_i and a_j was picked, it makes sense to pick all the paintings with sizes inbetween i and j so it's now essentially a prefix sum problem find max(pval[j] - pval[i-1] - (sz[j] - sz[i])) = (pval[j] - sz[j]) - (pval[i-1] - sz[i]) and if we iterate j, it now turns into "just keep the best (min) pval[i-1] - sz[i]" */ ll ans = -1, mni = 1e18; for(int i=1; i<=n; i++){ mni = min(mni, pval[i-1] - sz[i]); ans = max(ans, pval[i] - sz[i] - mni); //cout << ans << ' '; } cout << ans; 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...