#include <bits/stdc++.h> using namespace std; template<class T, class Y> ostream& operator<<(ostream& out, const pair<T,Y>& p) {out << p.first << ": " << p.second; return out;} template<class T> ostream& __print(ostream& out, string st, string en, string sep, T con) {out << st;typename T::size_type i=0; for (auto it=con.begin(); it!=con.end(); ++it, i++) {out << *it << (i<con.size()-1 ? sep : "");} out << en; return out;} #define register_print1(a, b, c, d) template <class T> \ ostream& operator<<(ostream& out, const a<T>& con) \ {return __print(out, b, c, d, con);} #define register_print2(a, b, c, d) template <class T, class Y> \ ostream& operator<<(ostream& out, const a<T, Y>& con) \ {return __print(out, b, c, d, con);} register_print1(vector, "[", "]", ", ") register_print1(set, "{", "}", ", ") register_print1(unordered_set, "{", "}", ", ") register_print2(map, "{", "}", ", ") register_print2(unordered_map, "{", "}", ", ") void solve() { int n, k; cin >> n >> k; vector<int> nums(n); vector<int> cnt(n); for (int i=0; i<n; i++) { cin >> nums[i]; nums[i]--; } // cout << nums << "\n" << cnt << "\n"; unordered_set<int> state; vector<int> indexes; int stop = -1; for (int i=0; i<n; i++) { int size_p = state.size(); state.insert(nums[i]); cnt[i] = state.size(); if (cnt[i] != size_p) { indexes.push_back(i); } if (cnt[i] == k) { stop = i; break; } } if (stop == -1) { cout << "-1\n"; return; } int mov = 0; int off = 0; for (int x: indexes) { mov += (x - off); off += 1; } //cout << nums << "\n" << cnt << "\n" << indexes << "\n" << mov << "\n" ; cout << mov << "\n"; /* 3 3 3 1 2 - 0 3 3 3 1 2 - 0 3 3 1 3 2 - 1 3 1 3 3 2 - 2 3 1 3 3 2 - 2 3 1 3 2 3 - 3 3 1 2 3 3 - 4 */ } int main() {solve();}
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <bits/stdc++.h> using namespace std; template<class T, class Y> ostream& operator<<(ostream& out, const pair<T,Y>& p) {out << p.first << ": " << p.second; return out;} template<class T> ostream& __print(ostream& out, string st, string en, string sep, T con) {out << st;typename T::size_type i=0; for (auto it=con.begin(); it!=con.end(); ++it, i++) {out << *it << (i<con.size()-1 ? sep : "");} out << en; return out;} #define register_print1(a, b, c, d) template <class T> \ ostream& operator<<(ostream& out, const a<T>& con) \ {return __print(out, b, c, d, con);} #define register_print2(a, b, c, d) template <class T, class Y> \ ostream& operator<<(ostream& out, const a<T, Y>& con) \ {return __print(out, b, c, d, con);} register_print1(vector, "[", "]", ", ") register_print1(set, "{", "}", ", ") register_print1(unordered_set, "{", "}", ", ") register_print2(map, "{", "}", ", ") register_print2(unordered_map, "{", "}", ", ") void solve() { int n, k; cin >> n >> k; vector<int> nums(n); vector<int> cnt(n); for (int i=0; i<n; i++) { cin >> nums[i]; nums[i]--; } // cout << nums << "\n" << cnt << "\n"; unordered_set<int> state; vector<int> indexes; int stop = -1; for (int i=0; i<n; i++) { int size_p = state.size(); state.insert(nums[i]); cnt[i] = state.size(); if (cnt[i] != size_p) { indexes.push_back(i); } if (cnt[i] == k) { stop = i; break; } } if (stop == -1) { cout << "-1\n"; return; } int mov = 0; int off = 0; for (int x: indexes) { mov += (x - off); off += 1; } //cout << nums << "\n" << cnt << "\n" << indexes << "\n" << mov << "\n" ; cout << mov << "\n"; /* 3 3 3 1 2 - 0 3 3 3 1 2 - 0 3 3 1 3 2 - 1 3 1 3 3 2 - 2 3 1 3 3 2 - 2 3 1 3 2 3 - 3 3 1 2 3 3 - 4 */ } int main() {solve();} |