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