模拟题
#include<iostream> #include<cstdio> #include<cstring> #include<map> #include<queue> using namespace std; map<int,int>mp; int sz; int id(int x){ if(!mp.count(x))mp[x]=++sz; return mp[x]; } struct page{ int cnt,ti,id; bool operator < (const page &rhs)const{ if(cnt!=rhs.cnt)return cnt>rhs.cnt; return ti>rhs.ti; } }; priority_queue<page>q; int cnt[1000005]; int read(){ char ch=getchar(); int x=0,f=1; while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } void refresh(){ while(q.top().cnt!=cnt[q.top().id]){ page x=q.top();q.pop(); x.cnt=cnt[x.id];q.push(x); } } int main(){ //freopen("a.in","r",stdin); int n=read(),m=read(),ans=0; for(int i=1;i<=m;i++){ int k=read();k=id(k); cnt[k]++; if(cnt[k]>1)ans++; else if(q.size()!=n)q.push((page){1,i,k}); else refresh(),cnt[q.top().id]=0,q.pop(),q.push((page){1,i,k}); } printf("%d\n",ans); return 0; }