#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 500'005;
int last_seen[N];
vector<pii> last_seen_cur;
ll dp[N];
int main(){
cin.tie(0)->sync_with_stdio(0);
int n,c,prev_size=-1;
ll max_dp=0,max_dp_cur=0;
cin >> n >> c;
for(int i=1,size,color; i<=n; ++i){
cin >> size >> color;
if(size != prev_size){
max_dp = max(max_dp, max_dp_cur);
for(auto &[color,pos] : last_seen_cur)
last_seen[color] = pos;
last_seen_cur.clear();
}
dp[i] = max({0LL, dp[last_seen[color]]+size, max_dp+size-c});
max_dp_cur = max(max_dp_cur, dp[i]);
prev_size = size;
last_seen_cur.push_back({color,i});
}
max_dp = max(max_dp, max_dp_cur);
cout << max_dp;
}
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N = 500'005; int last_seen[N]; vector<pii> last_seen_cur; ll dp[N]; int main(){ cin.tie(0)->sync_with_stdio(0); int n,c,prev_size=-1; ll max_dp=0,max_dp_cur=0; cin >> n >> c; for(int i=1,size,color; i<=n; ++i){ cin >> size >> color; if(size != prev_size){ max_dp = max(max_dp, max_dp_cur); for(auto &[color,pos] : last_seen_cur) last_seen[color] = pos; last_seen_cur.clear(); } dp[i] = max({0LL, dp[last_seen[color]]+size, max_dp+size-c}); max_dp_cur = max(max_dp_cur, dp[i]); prev_size = size; last_seen_cur.push_back({color,i}); } max_dp = max(max_dp, max_dp_cur); cout << max_dp; } |
English