#include <cstdio>
#include <set>
#include <vector>
using namespace std;
typedef long long LL;
const int MAXN = 5*100000 + 1;
int n, k;
int a[MAXN];
int main() {
scanf("%d %d", &n, &k);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
int size = 0;
int last = -1;
set<int> s;
vector<int> dup;
for(int i = 0; i < n && size < k; i++) {
if(s.find(a[i]) == s.end()) {
size++;
s.insert(a[i]);
} else {
dup.push_back(i);
}
last = i;
}
if(size < k) {
printf("-1\n");
return 0;
}
LL res = 0;
for(auto it = dup.rbegin(); it != dup.rend(); it++) {
res += (last - *it);
last--;
}
printf("%lld\n", res);
}
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 | #include <cstdio> #include <set> #include <vector> using namespace std; typedef long long LL; const int MAXN = 5*100000 + 1; int n, k; int a[MAXN]; int main() { scanf("%d %d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &a[i]); int size = 0; int last = -1; set<int> s; vector<int> dup; for(int i = 0; i < n && size < k; i++) { if(s.find(a[i]) == s.end()) { size++; s.insert(a[i]); } else { dup.push_back(i); } last = i; } if(size < k) { printf("-1\n"); return 0; } LL res = 0; for(auto it = dup.rbegin(); it != dup.rend(); it++) { res += (last - *it); last--; } printf("%lld\n", res); } |
English