#include <iostream> #include <vector> #include <stack> #include <cstring> using namespace std; int v2() { int k,n; cin >> n; cin >> k; std::vector<int> A(n); for (int i=0;i<n;i++){ int a; cin >> a; A[i] = a; } int collected[n+1]; std::memset(collected, 0, sizeof collected); int bad_indexes_on_left[n+1]; int good_indexes_on_right[n+1]; std::memset(bad_indexes_on_left, -1, sizeof bad_indexes_on_left); std::memset(good_indexes_on_right, -1, sizeof good_indexes_on_right); int good=0; int bad = 0; int bad_left_index=0; int good_right_index=0; for (int i=0;i<n;i++){ if (collected[A[i]] > 0){ bad++; if (i<k){ bad_indexes_on_left[bad_left_index] = i; bad_left_index++; } } else { if (i>=k) { good_indexes_on_right[good_right_index] = i; good_right_index++; } collected[A[i]] = 1; good++; } } if (good < k){ return -1; } int minutes =0; for (int i=0;i<bad_left_index;i++){ minutes += (good_indexes_on_right[i] - bad_indexes_on_left[i]); } return minutes; } int main() { std::cout << v2() << std::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 58 59 60 61 62 63 64 | #include <iostream> #include <vector> #include <stack> #include <cstring> using namespace std; int v2() { int k,n; cin >> n; cin >> k; std::vector<int> A(n); for (int i=0;i<n;i++){ int a; cin >> a; A[i] = a; } int collected[n+1]; std::memset(collected, 0, sizeof collected); int bad_indexes_on_left[n+1]; int good_indexes_on_right[n+1]; std::memset(bad_indexes_on_left, -1, sizeof bad_indexes_on_left); std::memset(good_indexes_on_right, -1, sizeof good_indexes_on_right); int good=0; int bad = 0; int bad_left_index=0; int good_right_index=0; for (int i=0;i<n;i++){ if (collected[A[i]] > 0){ bad++; if (i<k){ bad_indexes_on_left[bad_left_index] = i; bad_left_index++; } } else { if (i>=k) { good_indexes_on_right[good_right_index] = i; good_right_index++; } collected[A[i]] = 1; good++; } } if (good < k){ return -1; } int minutes =0; for (int i=0;i<bad_left_index;i++){ minutes += (good_indexes_on_right[i] - bad_indexes_on_left[i]); } return minutes; } int main() { std::cout << v2() << std::endl; return 0; } |