This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |