前言
可恶啊,最大的敌人 竟然是 我自己QAQ
传送门 :
思路
由于地面装的东西只能这么多
因此我们不难想到,我们每次放到柜子上的东西,下一次用的
时间,都是比较靠后的,
因此这就有了大根堆的由来
但是呢?我写不出来,又烦老毛病了剽窃了别人的思路
这是大忌啊QAQ
CODE
priority_queue<pair<int,int>> q;
void solve()
{
cin>>n>>k>>m;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int i = m;i>=1;i--)
{
//倒序枚举m个玩具,P记录该弯曲上次出现的位置,
//再次出现的时候赋值给S
if(p[a[i]] == 0 )
s[i] = INF;
else
s[i] = p[a[i]];
p[a[i]] = i;
}
int ans = 0 ;
for(int i=1;i<=m;i++)
{
if(v[a[i]])
{
k++;
q.push({s[i],a[i]});
}else
{
if(q.size() == k)
{
v[q.top().py] = 0;
q.pop();
}
q.push({s[i],a[i]});
v[a[i]] = 1;
++ans;
}
}
cout<<ans<<endl;
}