#include <bits/stdc++.h> using namespace std; #define int long long vector<pair<int,int>> v; const int maxn = 500009; int dp[maxn]; int dp2[maxn]; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,c; cin >> n >> c; for(int i = 0; i<n; i++){ int a,b; cin >> a >> b; v.emplace_back(a,b); } sort(v.begin(), v.end(), greater<pair<int,int>>()); int ans = 0; int i = 0; while(i < n){ int indx = i; int old_i = i; while(indx < n and v[indx].first == v[i].first){ dp2[v[indx].second] = max(dp2[v[indx].second], max(dp[v[indx].second] + v[indx].first, ans + v[indx].first - c)); indx++; } for(int x = old_i; x< indx; x++){ dp[v[x].second] = max(dp[v[x].second], dp2[v[x].second]); ans = max(ans,dp[v[x].second]); } for(int x = old_i; x< indx; x++){ dp2[v[x].second] = 0; } i = indx; } cout << ans << "\n"; }
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 30 31 32 33 34 35 36 37 38 39 | #include <bits/stdc++.h> using namespace std; #define int long long vector<pair<int,int>> v; const int maxn = 500009; int dp[maxn]; int dp2[maxn]; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,c; cin >> n >> c; for(int i = 0; i<n; i++){ int a,b; cin >> a >> b; v.emplace_back(a,b); } sort(v.begin(), v.end(), greater<pair<int,int>>()); int ans = 0; int i = 0; while(i < n){ int indx = i; int old_i = i; while(indx < n and v[indx].first == v[i].first){ dp2[v[indx].second] = max(dp2[v[indx].second], max(dp[v[indx].second] + v[indx].first, ans + v[indx].first - c)); indx++; } for(int x = old_i; x< indx; x++){ dp[v[x].second] = max(dp[v[x].second], dp2[v[x].second]); ans = max(ans,dp[v[x].second]); } for(int x = old_i; x< indx; x++){ dp2[v[x].second] = 0; } i = indx; } cout << ans << "\n"; } |