// Patryk Jędrzejczak #include <bits/stdc++.h> using namespace std; #define REP(i, n) for(int i = 0; i < n; ++i) #define REPR(i, n) for(int i = n - 1; i >= 0; --i) #define FOR(i, a, b) for(int i = a; i < b; ++i) #define FORR(i, a, b) for(int i = b - 1; i >= a; --i) #define EB emplace_back #define MP make_pair #define ST first #define ND second #define S size #define RS resize #define endl '\n' #define L long long template<class T> using V = vector<T>; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k; cin >> n >> k; vector<int> a(n); vector<int> first(n, n); int different = 0; REP(i, n) { cin >> a[i]; a[i]--; if (first[a[i]] == n) { different++; first[a[i]] = i; } } if (different < k) { cout << -1; return 0; } vector<bool> is_first(n); REP(i, n) { if (first[i] != n) { is_first[first[i]] = true; } } L result = 0; int found = 0; int position = 0; while (found < k) { if (is_first[position]) { result += (L)(position - found); found++; } position++; } cout << result; }
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 | // Patryk Jędrzejczak #include <bits/stdc++.h> using namespace std; #define REP(i, n) for(int i = 0; i < n; ++i) #define REPR(i, n) for(int i = n - 1; i >= 0; --i) #define FOR(i, a, b) for(int i = a; i < b; ++i) #define FORR(i, a, b) for(int i = b - 1; i >= a; --i) #define EB emplace_back #define MP make_pair #define ST first #define ND second #define S size #define RS resize #define endl '\n' #define L long long template<class T> using V = vector<T>; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k; cin >> n >> k; vector<int> a(n); vector<int> first(n, n); int different = 0; REP(i, n) { cin >> a[i]; a[i]--; if (first[a[i]] == n) { different++; first[a[i]] = i; } } if (different < k) { cout << -1; return 0; } vector<bool> is_first(n); REP(i, n) { if (first[i] != n) { is_first[first[i]] = true; } } L result = 0; int found = 0; int position = 0; while (found < k) { if (is_first[position]) { result += (L)(position - found); found++; } position++; } cout << result; } |