#include <bits/stdc++.h> using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using u128 = unsigned __int128; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, c; std::cin >> n >> c; std::vector<int> a(n), w(n); for (int i = 0; i < n; i++) { std::cin >> a[i] >> w[i]; } int m = *std::max_element(w.begin(), w.end()) + 1; std::vector<i64> dp(m); i64 mx = 0; std::vector<std::pair<int, i64>> tmp; for (int l = 0, r = 0; l < n; l = r) { while (r < n && a[l] == a[r]) { r++; } for (int i = l; i < r; i++) { tmp.push_back({w[i], std::max(dp[w[i]] + a[i], mx + a[i] - c)}); } for (auto [x, v] : tmp) { dp[x] = std::max(dp[x], v); mx = std::max(mx, dp[x]); } tmp.clear(); } std::cout << mx << "\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 | #include <bits/stdc++.h> using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using u128 = unsigned __int128; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, c; std::cin >> n >> c; std::vector<int> a(n), w(n); for (int i = 0; i < n; i++) { std::cin >> a[i] >> w[i]; } int m = *std::max_element(w.begin(), w.end()) + 1; std::vector<i64> dp(m); i64 mx = 0; std::vector<std::pair<int, i64>> tmp; for (int l = 0, r = 0; l < n; l = r) { while (r < n && a[l] == a[r]) { r++; } for (int i = l; i < r; i++) { tmp.push_back({w[i], std::max(dp[w[i]] + a[i], mx + a[i] - c)}); } for (auto [x, v] : tmp) { dp[x] = std::max(dp[x], v); mx = std::max(mx, dp[x]); } tmp.clear(); } std::cout << mx << "\n"; return 0; } |