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