#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+3;
long long n,c,res = 0;
long long MAX_DP[N],DP[N];
unordered_set<int>M[N];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> c;
vector<pair<int,int>>klo;
for(int i = 0;i < n;i++){
int h,w;
cin >> h >> w;
M[h].insert(w);
}
for(int i = (int)5e5;i >= 1;i--){
for(auto w: M[i]){
DP[w] = max({DP[w] + i,MAX_DP[i+1] + i - c,DP[w]});
MAX_DP[i] = max(MAX_DP[i],DP[w]);
res = max({res,DP[w],MAX_DP[i]});
}
MAX_DP[i] = max(MAX_DP[i+1],MAX_DP[i]);
res = max(res,MAX_DP[i]);
}
cout << res;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include<bits/stdc++.h> using namespace std; const int N = 5e5+3; long long n,c,res = 0; long long MAX_DP[N],DP[N]; unordered_set<int>M[N]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> c; vector<pair<int,int>>klo; for(int i = 0;i < n;i++){ int h,w; cin >> h >> w; M[h].insert(w); } for(int i = (int)5e5;i >= 1;i--){ for(auto w: M[i]){ DP[w] = max({DP[w] + i,MAX_DP[i+1] + i - c,DP[w]}); MAX_DP[i] = max(MAX_DP[i],DP[w]); res = max({res,DP[w],MAX_DP[i]}); } MAX_DP[i] = max(MAX_DP[i+1],MAX_DP[i]); res = max(res,MAX_DP[i]); } cout << res; } |
English