#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair < ll, ll > pii; vector < pii > v; const int t = 500'003; ll last[t]; ll dp[t]; set < pii > mapa; int main(){ ll n, c; cin >> n >> c; for(int i = 0; i < n; i++){ ll a, b; cin >> a >> b; if(mapa.find({a, b}) == mapa.end()) v.push_back({a, b}); mapa.insert({a, b}); } sort(v.begin(), v.end(), greater < pii > ()); ll ma = 0, sma = 0, najw = 0; bool cos = 0; for(int i = 0; i < v.size(); i++){ if(i >= 1 && v[i].first < v[i - 1].first){ cos = 1; for(int j = sma; j < i; j++){ najw = max(najw, dp[j + 1]); } sma = i; } if(last[v[i].second] == 0){ dp[i + 1] = najw + v[i].first - c; if(!cos) dp[i + 1] += c; } else { dp[i + 1] = max(najw - c, dp[last[v[i].second]]) + v[i].first; } last[v[i].second] = i + 1; ma = max(ma, dp[i + 1]); } cout << ma << "\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 40 41 42 43 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair < ll, ll > pii; vector < pii > v; const int t = 500'003; ll last[t]; ll dp[t]; set < pii > mapa; int main(){ ll n, c; cin >> n >> c; for(int i = 0; i < n; i++){ ll a, b; cin >> a >> b; if(mapa.find({a, b}) == mapa.end()) v.push_back({a, b}); mapa.insert({a, b}); } sort(v.begin(), v.end(), greater < pii > ()); ll ma = 0, sma = 0, najw = 0; bool cos = 0; for(int i = 0; i < v.size(); i++){ if(i >= 1 && v[i].first < v[i - 1].first){ cos = 1; for(int j = sma; j < i; j++){ najw = max(najw, dp[j + 1]); } sma = i; } if(last[v[i].second] == 0){ dp[i + 1] = najw + v[i].first - c; if(!cos) dp[i + 1] += c; } else { dp[i + 1] = max(najw - c, dp[last[v[i].second]]) + v[i].first; } last[v[i].second] = i + 1; ma = max(ma, dp[i + 1]); } cout << ma << "\n"; } |