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