// 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; } |
English