#include <iostream> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pll pair<ll, ll> #define pb push_back const int s = 500'005; ll h[s], col[s], dp[s], dp1[s], upd[s]; vector<ll>v; void f() { //input ll n, minus; cin >> n >> minus; for (ll i = 1; i <= n; i++) cin >> h[i] >> col[i]; ll curr = 0; ll maxi = 0, maxi_v = 0, maxi1 = 0, maxi1_v = 0; ll maxis = 0, maxi_vs = 0, maxi1s = 0, maxi1_vs = 0; for (ll i = n; i >= 0; i--) { if (h[i] != curr) { if (maxi_vs > maxi_v) { maxi_v = maxi_vs; maxi = maxis; if (maxi1_vs > maxi1_v) { maxi1_v = maxi1_vs; maxi1 = maxi1s; } } else if (maxi1_vs > maxi_v) { maxi_v = maxi1_vs; maxi = maxi1s; } for (ll i : v) dp[i] = max(dp[i], dp1[i]); v.clear(); maxis = 0; maxi_vs = 0; maxi1s = 0; maxi1_vs = 0; } if (i == 0) continue; v.pb(col[i]); dp1[col[i]] = max(dp[col[i]] + h[i], dp[maxi] + h[i] - minus); dp1[col[i]] = max(dp1[col[i]], dp[maxi1] + h[i] - minus); if (dp1[col[i]] > maxi_vs) maxis = col[i], maxi_vs = dp1[col[i]]; else if (dp1[col[i]] > maxi1_vs) maxi1s = col[i], maxi1_vs = dp1[col[i]]; curr = h[i]; } cout << maxi_v; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); f(); }
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 44 45 46 47 48 49 50 51 52 53 54 | #include <iostream> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pll pair<ll, ll> #define pb push_back const int s = 500'005; ll h[s], col[s], dp[s], dp1[s], upd[s]; vector<ll>v; void f() { //input ll n, minus; cin >> n >> minus; for (ll i = 1; i <= n; i++) cin >> h[i] >> col[i]; ll curr = 0; ll maxi = 0, maxi_v = 0, maxi1 = 0, maxi1_v = 0; ll maxis = 0, maxi_vs = 0, maxi1s = 0, maxi1_vs = 0; for (ll i = n; i >= 0; i--) { if (h[i] != curr) { if (maxi_vs > maxi_v) { maxi_v = maxi_vs; maxi = maxis; if (maxi1_vs > maxi1_v) { maxi1_v = maxi1_vs; maxi1 = maxi1s; } } else if (maxi1_vs > maxi_v) { maxi_v = maxi1_vs; maxi = maxi1s; } for (ll i : v) dp[i] = max(dp[i], dp1[i]); v.clear(); maxis = 0; maxi_vs = 0; maxi1s = 0; maxi1_vs = 0; } if (i == 0) continue; v.pb(col[i]); dp1[col[i]] = max(dp[col[i]] + h[i], dp[maxi] + h[i] - minus); dp1[col[i]] = max(dp1[col[i]], dp[maxi1] + h[i] - minus); if (dp1[col[i]] > maxi_vs) maxis = col[i], maxi_vs = dp1[col[i]]; else if (dp1[col[i]] > maxi1_vs) maxi1s = col[i], maxi1_vs = dp1[col[i]]; curr = h[i]; } cout << maxi_v; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); f(); } |