#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
#include <set>
using namespace std;
int main() {
int n, c, size, color;
cin >> n >> c;
long long int global_max = 0, temp_global_max = 0;
vector<long long int> max_ending_with_color(500001, 0);
vector<set<int>> available_colors_for_size(500001);
for (int i = 1; i <= n; i++) {
cin >> size >> color;
available_colors_for_size[size].insert(color);
}
n = 500000;
// for (int i = 1; i <= n; i++) {
// cout << i << ": ";
// for (set<int>::iterator it = available_colors_for_size[i].begin(); it != available_colors_for_size[i].end(); ++it) {
// cout << *it << " ";
// }
// cout << endl;
// }
// for (int i = 1; i <= n; i++) {
// cout << max_ending_with_color[i] << " ";
// }
// cout << endl;
for (int size = 1; size <= n; size++) {
for (set<int>::iterator it = available_colors_for_size[size].begin(); it != available_colors_for_size[size].end(); ++it) {
int color = *it;
long long int val = max(global_max - c + size, max_ending_with_color[color] + size);
temp_global_max = max(temp_global_max, val);
max_ending_with_color[color] = val;
}
// for (int i = 1; i <= 10; i++) {
// cout << max_ending_with_color[i] << " ";
// }
// cout << endl;
global_max = temp_global_max;
}
cout << global_max << endl;
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 53 54 55 56 57 | #include <iostream> #include <vector> #include <algorithm> #include <climits> #include <set> using namespace std; int main() { int n, c, size, color; cin >> n >> c; long long int global_max = 0, temp_global_max = 0; vector<long long int> max_ending_with_color(500001, 0); vector<set<int>> available_colors_for_size(500001); for (int i = 1; i <= n; i++) { cin >> size >> color; available_colors_for_size[size].insert(color); } n = 500000; // for (int i = 1; i <= n; i++) { // cout << i << ": "; // for (set<int>::iterator it = available_colors_for_size[i].begin(); it != available_colors_for_size[i].end(); ++it) { // cout << *it << " "; // } // cout << endl; // } // for (int i = 1; i <= n; i++) { // cout << max_ending_with_color[i] << " "; // } // cout << endl; for (int size = 1; size <= n; size++) { for (set<int>::iterator it = available_colors_for_size[size].begin(); it != available_colors_for_size[size].end(); ++it) { int color = *it; long long int val = max(global_max - c + size, max_ending_with_color[color] + size); temp_global_max = max(temp_global_max, val); max_ending_with_color[color] = val; } // for (int i = 1; i <= 10; i++) { // cout << max_ending_with_color[i] << " "; // } // cout << endl; global_max = temp_global_max; } cout << global_max << endl; return 0; } |
English