#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; } |