题解:
set+map维护三个量,不要手贱就没什么大事了。
code:
#include<set>
#include<map>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map<int,int> mp1,mp2;
struct node{int x,c,t;};
bool operator < (node a,node b)
{
if(a.c==b.c)
{
if(a.t==b.t) return a.x<b.x;
return a.t<b.t;
}
return a.c<b.c;
}
set<node> q;
int n,m,ans=0,now=0;
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
int op;node t;scanf("%d",&op);
if(mp1[op]!=0)
{
ans++;t.x=op;t.c=mp1[op];t.t=mp2[op];
q.erase(t);t.c++;mp1[op]++;q.insert(t);
}
else
{
if(now==n)
{
t=*q.begin();
mp1[t.x]=mp2[t.x]=0;
q.erase(t);
now--;
}
now++;mp1[op]++;mp2[op]=i;
t.x=op;t.c=1;t.t=i;q.insert(t);
}
}
printf("%d",ans);
}