#include <iostream>
using namespace std;
typedef long long ll;
const int N = 5e5+9;
int A[N], W[N], last[N];
ll MX_W[N], dp[N];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, c; cin >> n >> c;
ll res = 0, dp_mx = -1, prev_a = -1, mx_lower = -1;
for(int i = 1; i <= n; ++i) {
int a, w; cin >> a >> w;
A[i] = a;
W[i] = w;
ll mx = -1;
if(last[w]) {
if(A[last[w]] < a) {
mx = dp[last[w]];
}
else {
mx = MX_W[last[w]];
}
}
MX_W[i] = mx;
dp[i] = a;
if(mx != -1) {
dp[i] = max(dp[i], mx+a);
}
mx = -1;
if(prev_a < a) {
mx_lower = dp_mx;
}
mx = mx_lower;
if(mx != -1) {
dp[i] = max(dp[i], mx+a-c);
}
res = max(res, dp[i]);
last[w] = i;
dp_mx = max(dp_mx, dp[i]);
prev_a = a;
}
cout << res << "\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 45 46 47 48 49 50 51 52 | #include <iostream> using namespace std; typedef long long ll; const int N = 5e5+9; int A[N], W[N], last[N]; ll MX_W[N], dp[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, c; cin >> n >> c; ll res = 0, dp_mx = -1, prev_a = -1, mx_lower = -1; for(int i = 1; i <= n; ++i) { int a, w; cin >> a >> w; A[i] = a; W[i] = w; ll mx = -1; if(last[w]) { if(A[last[w]] < a) { mx = dp[last[w]]; } else { mx = MX_W[last[w]]; } } MX_W[i] = mx; dp[i] = a; if(mx != -1) { dp[i] = max(dp[i], mx+a); } mx = -1; if(prev_a < a) { mx_lower = dp_mx; } mx = mx_lower; if(mx != -1) { dp[i] = max(dp[i], mx+a-c); } res = max(res, dp[i]); last[w] = i; dp_mx = max(dp_mx, dp[i]); prev_a = a; } cout << res << "\n"; return 0; } |
English