#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"; } |