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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);
    int n,k,i;
    cin>>n>>k;
    int t[n+5];
    for (i=0; i<n; ++i)
    {
        cin>>t[i];
    }
//    for (i=0; i<n; ++i)
//    {
//        cout<<t[i]<<" ";
//    }

    int czybyla[n+5];
    //dla pewnosci wyzeruje
    for (i=0; i<=n; ++i)
    {
        czybyla[i]=0;
    }
    int ileroznych=0;
    // idzie od lewej i patrzy ile ma roznych marek; jak znajdzie k roznych to konczy ten etap i wraca
    // na start

    for (i=0; i<n; ++i)
    {
        if(czybyla[t[i]]==0)
        {
            czybyla[t[i]]=1;
            ileroznych++;
            if (ileroznych==k)break;
        }
    }

    // jezeli za malo roznych to -1 i wyjscie przez komin
//    cout<<"ileroznych= "<<ileroznych<<endl;
    if (ileroznych<k)
    {
        cout<<-1<<endl;
        return 0;
    }
    int pierwszazla, ostatniadobra, sekundy=0; // pierwszazla trzyma indeks
    //zerujemy (kociolek) po raz kolejny
    for (i=0; i<=n; ++i)
    {
        czybyla[i]=0;
    }
    // i teraz przejscie do fazy zasadniczej
    ileroznych=1;
    czybyla[t[0]]=1;
    ostatniadobra=0;
    pierwszazla=1;

    for (i=1; i<n; ++i)
    {
        if (t[i]!=t[ostatniadobra] && czybyla[t[i]]==0)
        {
            czybyla[t[i]]=1;
            ileroznych++;
            sekundy+=(i-pierwszazla);
            pierwszazla++;
            ostatniadobra++;
        }
        if (ileroznych==k)break;
    }
    cout<<sekundy<<endl;
//        for (i=0; i<n; ++i)
//    {
//        cout<<t[i]<<" ";
//    }
//    cout<<endl;

    return 0;
}