#include <bits/stdc++.h>
using namespace std;
long long scores[500001];
int widths[500001];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, c;
cin >> n >> c;
vector<int> sizes(n + 1), patterns(n + 1);
for (int i = 1; i <= n; ++i)
{
cin >> sizes[i] >> patterns[i];
}
reverse(sizes.begin() + 1, sizes.end());
reverse(patterns.begin() + 1, patterns.end());
long long maximum = 0;
long long currentMaximum = 0;
for (int i = 1; i <= n; ++i)
{
if (sizes[i] != sizes[i - 1])
{
maximum = currentMaximum;
}
if (widths[patterns[i]] == sizes[i]) continue;
widths[patterns[i]] = sizes[i];
scores[patterns[i]] = max(scores[patterns[i]] + sizes[i], maximum + sizes[i] - c);
currentMaximum = max(currentMaximum, scores[patterns[i]]);
}
cout << currentMaximum << '\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 | #include <bits/stdc++.h> using namespace std; long long scores[500001]; int widths[500001]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, c; cin >> n >> c; vector<int> sizes(n + 1), patterns(n + 1); for (int i = 1; i <= n; ++i) { cin >> sizes[i] >> patterns[i]; } reverse(sizes.begin() + 1, sizes.end()); reverse(patterns.begin() + 1, patterns.end()); long long maximum = 0; long long currentMaximum = 0; for (int i = 1; i <= n; ++i) { if (sizes[i] != sizes[i - 1]) { maximum = currentMaximum; } if (widths[patterns[i]] == sizes[i]) continue; widths[patterns[i]] = sizes[i]; scores[patterns[i]] = max(scores[patterns[i]] + sizes[i], maximum + sizes[i] - c); currentMaximum = max(currentMaximum, scores[patterns[i]]); } cout << currentMaximum << '\n'; } |
English