#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5+8;
int a[N];
int kol[N];
int pre[N];
int pre2[N];
map<int, int> ma;
int32_t main(){
int n, c;
cin >> n >> c;
for(int i=0; i<n; i++){
cin >> a[i] >> kol[i];
auto it = ma.find(kol[i]);
if(it!=ma.end()){
int prop = it->second;
if(a[prop]!=a[i]) pre[i] = prop;
else pre[i] = pre[prop];
ma[kol[i]] = i;
}
else{
ma.insert({kol[i], i});
pre[i]=-1;
}
if(i==0) pre2[i]=-1;
else{
if(a[i]!=a[i-1]) pre2[i]=i-1;
else pre2[i] = pre2[i-1];
}
}
vector<int> bio(n, 0), nb(n, 0);
bio[0] = a[0];
nb[0] = a[0];
for(int i=1; i<n; i++){
bio[i] = a[i];
if(pre2[i]>=0) bio[i] = max(bio[i], a[i] + nb[pre2[i]] - c);
if(pre[i]>=0) bio[i]=max(bio[i], bio[pre[i]]+a[i]);
nb[i] = max(nb[i-1], bio[i]);
}
cout << nb[n-1]<<"\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 44 45 | #include<bits/stdc++.h> using namespace std; #define int long long const int N = 5e5+8; int a[N]; int kol[N]; int pre[N]; int pre2[N]; map<int, int> ma; int32_t main(){ int n, c; cin >> n >> c; for(int i=0; i<n; i++){ cin >> a[i] >> kol[i]; auto it = ma.find(kol[i]); if(it!=ma.end()){ int prop = it->second; if(a[prop]!=a[i]) pre[i] = prop; else pre[i] = pre[prop]; ma[kol[i]] = i; } else{ ma.insert({kol[i], i}); pre[i]=-1; } if(i==0) pre2[i]=-1; else{ if(a[i]!=a[i-1]) pre2[i]=i-1; else pre2[i] = pre2[i-1]; } } vector<int> bio(n, 0), nb(n, 0); bio[0] = a[0]; nb[0] = a[0]; for(int i=1; i<n; i++){ bio[i] = a[i]; if(pre2[i]>=0) bio[i] = max(bio[i], a[i] + nb[pre2[i]] - c); if(pre[i]>=0) bio[i]=max(bio[i], bio[pre[i]]+a[i]); nb[i] = max(nb[i-1], bio[i]); } cout << nb[n-1]<<"\n"; } |
English