#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; const int N = 5e5+10; ll a[N], w[N], mxv[N], n, c; vector<int> hg[N]; void solve() { cin>>n>>c; for (int i=1; i<=n; ++i) { cin>>a[i]>>w[i]; hg[a[i]].push_back(w[i]); } ll ans = 0; set<pii> st; for (int i=1; i<N; ++i) st.insert({0, i}); for (int i=N-2; i>=1; --i) { vector<pair<pii, pii>> chg; for (auto u : hg[i]) { pii lst = *st.rbegin(); pii fnd = *st.find({mxv[u], u}); assert(fnd.second == u); ll nmx = max({mxv[u], lst.first + (lst.second == u ? 0 : -c) + i, fnd.first + i}); ans = max(ans, nmx); chg.push_back({{mxv[u], u}, {nmx, u}}); } for (auto u : chg) { st.erase(u.first); st.insert(u.second); mxv[u.second.second] = u.second.first; } } cout<<ans<<"\n"; } int main() { int t=1; //cin>>t; while (t--) solve(); }
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; const int N = 5e5+10; ll a[N], w[N], mxv[N], n, c; vector<int> hg[N]; void solve() { cin>>n>>c; for (int i=1; i<=n; ++i) { cin>>a[i]>>w[i]; hg[a[i]].push_back(w[i]); } ll ans = 0; set<pii> st; for (int i=1; i<N; ++i) st.insert({0, i}); for (int i=N-2; i>=1; --i) { vector<pair<pii, pii>> chg; for (auto u : hg[i]) { pii lst = *st.rbegin(); pii fnd = *st.find({mxv[u], u}); assert(fnd.second == u); ll nmx = max({mxv[u], lst.first + (lst.second == u ? 0 : -c) + i, fnd.first + i}); ans = max(ans, nmx); chg.push_back({{mxv[u], u}, {nmx, u}}); } for (auto u : chg) { st.erase(u.first); st.insert(u.second); mxv[u.second.second] = u.second.first; } } cout<<ans<<"\n"; } int main() { int t=1; //cin>>t; while (t--) solve(); } |