Submission #717762

#TimeUsernameProblemLanguageResultExecution timeMemory
717762ToxtaqArt Exhibition (JOI18_art)C++17
100 / 100
252 ms95960 KiB
#include<bits/stdc++.h> using namespace std; vector<int>LOG; struct SparseTable{ vector<vector<long long>>sTable; SparseTable(int n, vector<long long>&v){ sTable.resize(LOG[n] + 1); for(int i = 0;i <= LOG[n];++i)sTable[i].resize(n + 1); for(int i = 1;i <= n;++i){ sTable[0][i] = v[i]; } for(int i = 1;i <= LOG[n];++i){ for(int j = 1;j + (1 << (i - 1)) <= n;++j){ sTable[i][j] = max(sTable[i - 1][j], sTable[i - 1][j + (1 << (i - 1))]); } } } long long Query(int l, int r){ int lg = LOG[r - l + 1]; return max(sTable[lg][l], sTable[lg][r - (1 << lg) + 1]); } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; LOG.resize(n + 1); LOG[1] = 0; for(int i = 2;i <= n;++i)LOG[i] = LOG[i / 2] + 1; vector<pair<long long, long long>>arts(n + 1); for(int i = 1;i <= n;++i){ cin >> arts[i].first >> arts[i].second; } sort(arts.begin(), arts.end()); vector<long long>P(n + 1); for(int i = 1;i <= n;++i){ P[i] = P[i - 1] + arts[i].second + arts[i - 1].first - arts[i].first; // cout << "P[" << i << "]=" << P[i] << '\n'; } SparseTable table(n, P); long long mx = 0; for(int i = 1;i <= n;++i){ long long P_max = table.Query(i, n); long long num = (P_max - P[i - 1]) - arts[i - 1].first + arts[i].first; mx = max(mx, num); } cout << mx; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...