#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
constexpr ll M = 500'010;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll n, c;
cin >> n >> c;
vector<pair<ll, ll>> klocki(n);
for(ll i=0; i<n; ++i) cin >> klocki[i].first >> klocki[i].second;
vector<ll> last(M, -1);
vector<ll> dp(n);
ll maximum = -1;
queue<pair<ll, ll>> Q;
for(ll i=0; i<n; ++i) {
auto[w, k] = klocki[i];
while(!Q.empty()) {
auto[kolor, idx] = Q.front();
if(klocki[idx].first < w) {
if(maximum == -1) maximum = idx;
else if(dp[maximum] < dp[idx]) maximum = idx;
last[kolor] = idx;
Q.pop();
} else break;
}
dp[i] = w;
if(last[k]!=-1) {
dp[i] = max(dp[i], w+dp[last[k]]);
}
if(maximum != -1) {
dp[i] = max(dp[i], w+dp[maximum] - (klocki[maximum].second != k)*c);
}
Q.push({k, i});
}
ll ans = dp[0];
for(int i=1; i<n; ++i) ans=max(ans, dp[i]);
cout << ans << "\n";
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 34 35 36 37 38 39 40 41 42 43 44 | #include <bits/stdc++.h> typedef long long ll; using namespace std; constexpr ll M = 500'010; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, c; cin >> n >> c; vector<pair<ll, ll>> klocki(n); for(ll i=0; i<n; ++i) cin >> klocki[i].first >> klocki[i].second; vector<ll> last(M, -1); vector<ll> dp(n); ll maximum = -1; queue<pair<ll, ll>> Q; for(ll i=0; i<n; ++i) { auto[w, k] = klocki[i]; while(!Q.empty()) { auto[kolor, idx] = Q.front(); if(klocki[idx].first < w) { if(maximum == -1) maximum = idx; else if(dp[maximum] < dp[idx]) maximum = idx; last[kolor] = idx; Q.pop(); } else break; } dp[i] = w; if(last[k]!=-1) { dp[i] = max(dp[i], w+dp[last[k]]); } if(maximum != -1) { dp[i] = max(dp[i], w+dp[maximum] - (klocki[maximum].second != k)*c); } Q.push({k, i}); } ll ans = dp[0]; for(int i=1; i<n; ++i) ans=max(ans, dp[i]); cout << ans << "\n"; return 0; } |
English