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

using namespace std;
struct pp{
    int c,l=0;
};
int t[500002];
int pocz[500002];
int dw[500002];
bool b=1;
//pp skomp[500002];
int main()
{
   // ios_base::sync_with_stdio(false);
    int n,k,czy=0;
    long long w=0;
    scanf("%d%d",&n,&k);
    for(int i=0;i^n;++i){
        scanf("%d",&t[i]);
        dw[t[i]]++;

    }
    for(int i=0;i<n;++i){
        if(dw[t[i]]>1){
            czy+=dw[t[i]]-1;
            dw[t[i]]=1;
        }
        //cout<<dw[t[i]]<<endl;
    }
   // cout<<czy<<endl;
    if(n-czy<k){
        printf("-1");
        return 0;
    }
    czy=0;//czy to duplikaty
    int d=0;//ile duplikatow w przedziale za
    int iler=0;//rozne ktore wejda na miejsca k pierwszych duplikatow
    for(int i=0;i<k;++i){
        pocz[t[i]]++;
        if(pocz[t[i]]>1)czy++;
    }
    if(czy==0){
        printf("0");
        return 0;
    }
    //cout<<czy<<endl;
    int y=n-1;
    int indx;
    for(int i=k;i<n;++i){
        pocz[t[i]]++;
        if(pocz[t[i]]>1)d++;
        else iler++;
        if(iler==czy){
            y=i;
            break;
        }
    }
   // cout<<"y="<<y<<endl;
    indx=0;
    for(int i=y-1;i>=k;--i){
        if(pocz[t[i]]>1){
            w+=y-i-indx;
            pocz[t[i]]--;
            indx++;
        }
    }
 //cout<<"w="<<w<<endl;
    for(int i=k-1;i>=0;--i){
       if(pocz[t[i]]>1){
            w+=y-i-indx;
            pocz[t[i]]--;
            indx++;
        }
    }
   printf("%lld",w);
    return 0;
}