#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std;
const int N=1e6+10;
int n,k,a[N],cnt[N],vis[N];
vector<int> v[N];
struct node{
int x,dis;
bool operator <(const node &b)const{return dis==b.dis?x<b.x:dis>b.dis;}
};
multiset<node> s;
int t[N];
int main(){
scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) v[a[i]].push_back(i);
int ed=1;
// for(int i=2;i<=n;i++) if(a[i]!=a[ed]) a[++ed]=a[i];
for(int i=1;i<=n;i++) v[i].push_back(N);
int sz=0,res=0;
for(int i=1;i<=n;i++){
if(vis[a[i]]==0){
++sz;++res;vis[a[i]]=1;
if(sz>k){
vis[(*s.begin()).x]=0;
s.erase((s.begin()));
--sz;
}
}else{
s.erase(s.lower_bound({a[i],i}));
}
s.insert({a[i],v[a[i]][++cnt[a[i]]]});
}
cout<<res<<endl;
}
Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) B. Heidi and Library (medium)
最新推荐文章于 2024-06-03 17:44:21 发布