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
#include <bits/stdc++.h>

using namespace std;

const int N_MAX = 5e5;
int n, k;
vector<int> butelki(N_MAX);
vector<bool> czy_wyst(N_MAX + 1); // czy jakas butelka wystapila juz wczesniej
int wynik = 0, il_roznych = 0;
bool czy_da_sie = false;

int main(void) // greedy
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> k;
    for(int i=0; i<n; ++i){
        cin >> butelki[i];
        if(!czy_wyst[butelki[i]]){
            wynik += (i - il_roznych); // wstawienie na odpowiednie miejsce
            il_roznych++;
            czy_wyst[butelki[i]] = true;
        }

        if(il_roznych == k){ // wybrano ilosc potrzebnych - koniec
            czy_da_sie = true;
            break;
        }
    }

    if(czy_da_sie)
        cout << wynik << '\n';
    else cout << -1 << '\n';
}