#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n, c;
cin>>n>>c;
vector<pair<ll, set<ll>>>v;
unordered_map<ll, ll>m;
for(int i=0; i<n; i++)
{
ll cur, curr;
cin>>cur>>curr;
m[curr]=0;
if(i==0||v.back().first!=cur)
{
v.push_back({cur, (set<ll>){curr}});
}
else
v.back().second.insert(curr);
}
v.push_back({0, (set<ll>){0}});
reverse(v.begin(), v.end());
int siz=v.size();
vector<ll>dp(siz, 0);
for(int i=1; i<siz; i++)
{
ll cur=v[i].first;
//cout<<cur<<" "<<i<<": \n";
for(auto x:v[i].second)
{
//cout<<x<<" ";
dp[i]=max(max(dp[i], m[x]+cur), max(dp[i-1]+cur-c, dp[i-1]));
m[x]=max(m[x]+cur, dp[i-1]+cur-c);
}
//cout<<endl;
}
cout<<dp[siz-1];
}
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; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, c; cin>>n>>c; vector<pair<ll, set<ll>>>v; unordered_map<ll, ll>m; for(int i=0; i<n; i++) { ll cur, curr; cin>>cur>>curr; m[curr]=0; if(i==0||v.back().first!=cur) { v.push_back({cur, (set<ll>){curr}}); } else v.back().second.insert(curr); } v.push_back({0, (set<ll>){0}}); reverse(v.begin(), v.end()); int siz=v.size(); vector<ll>dp(siz, 0); for(int i=1; i<siz; i++) { ll cur=v[i].first; //cout<<cur<<" "<<i<<": \n"; for(auto x:v[i].second) { //cout<<x<<" "; dp[i]=max(max(dp[i], m[x]+cur), max(dp[i-1]+cur-c, dp[i-1])); m[x]=max(m[x]+cur, dp[i-1]+cur-c); } //cout<<endl; } cout<<dp[siz-1]; } |
English