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
#include <iostream>
#include <stdio.h>
#include <map>

using namespace std;

long long tab[500100];
bool pierwszy[500100];
bool usuniety[500100];
map<long long,long long>m;
int main() {
	// your code goes here
	long long n,k,a,i=-1,r=0;
	scanf("%lld%lld",&n,&k);
	for(long long j=0;j<n;j++)
	{
		scanf("%lld",&a);
		tab[j]=a;
		if(m.find(a) == m.end())pierwszy[j]=true;
		m[a]++;
		if (m.size() == k)i=j;
	}
	if(i==-1){printf("-1\n");return 0;}
/*	
	for(auto it = m.begin();it!=m.end();it++)
	{
		printf("[%d,%d]",it->first, it->second);
	}
	printf("\ni:%d\n",i);
	
	
		printf("%d:\npierwszy:",i);
		for(int i =0;i<n;i++)printf("%d,",pierwszy[i]);
		printf("\nusuniety:");
		for(int i =0;i<n;i++)printf("%d,",usuniety[i]);
		printf("\n");
*/

	long long j=1;
	long long d=0;
	while(j-d<k)
	{
		if(pierwszy[j])
		{
			r+=d;
			j++;
		}
		else
		{
			d++;j++;
		}
	}
		
	printf("%lld\n",r);
	
	return 0;
}