#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
cin.tie(0)->sync_with_stdio(0);
LL n,c;
cin>>n>>c;
vector<LL> a(n);
vector<LL> w(n);
vector<LL> dp(n);
vector<LL> maxiW(500001);
LL maxi=0;
for(LL i=0;i<n;i++){
cin>>a[i]>>w[i];
if(i>0 && a[i]!=a[i-1])
for(LL j=i-1;j>=0;j--){
maxi=max(maxi,dp[j]);
maxiW[w[j]]=max(maxiW[w[j]],dp[j]);
if(j>0 && a[j-1]!=a[j])break;
}
dp[i]=a[i]+max(maxi-c,maxiW[w[i]]);
// cout<<dp[i]<<endl;
}
for(LL j=n-1;j>=0;j--){
maxi=max(maxi,dp[j]);
}
cout<<maxi<<endl;
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; typedef long long LL; int main(){ cin.tie(0)->sync_with_stdio(0); LL n,c; cin>>n>>c; vector<LL> a(n); vector<LL> w(n); vector<LL> dp(n); vector<LL> maxiW(500001); LL maxi=0; for(LL i=0;i<n;i++){ cin>>a[i]>>w[i]; if(i>0 && a[i]!=a[i-1]) for(LL j=i-1;j>=0;j--){ maxi=max(maxi,dp[j]); maxiW[w[j]]=max(maxiW[w[j]],dp[j]); if(j>0 && a[j-1]!=a[j])break; } dp[i]=a[i]+max(maxi-c,maxiW[w[i]]); // cout<<dp[i]<<endl; } for(LL j=n-1;j>=0;j--){ maxi=max(maxi,dp[j]); } cout<<maxi<<endl; return 0; } |
English