当前位置: 代码迷 >> 综合 >> bzoj1206: [HNOI2005]虚拟内存
  详细解决方案

bzoj1206: [HNOI2005]虚拟内存

热度:77   发布时间:2023-10-29 10:42:42.0

题意

这么长的题面肯定要自己看啊

题解

我投机取巧,用了我蹩脚的STL瞎写了一波

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
int n,m;
set<pair<int,pair<int,int> > > S;//出现的次数 出现的时间 值是什么
set<pair<int,pair<int,int> > >::iterator it;
map<int,int> p,p1;//时间 位置 
int ans=0;
int main()
{int shen=0;//现在里面有多少个数 scanf("%d%d",&n,&m);for (int u=1;u<=m;u++){int x;scanf("%d",&x);if (p[x]==0)//这个值一开始不存在{p[x]=u;p1[x]=1;if (shen<n)//不够n个数{S.insert(make_pair(p1[x],make_pair(p[x],x)));shen++;}else{it=S.lower_bound(make_pair(0,make_pair(0,0)));p[it->second.second]=0;p1[it->second.second]=0;S.erase(it);S.insert(make_pair(p1[x],make_pair(p[x],x)));}}else{ans++;it=S.find(make_pair(p1[x],make_pair(p[x],x)));p1[x]++;S.insert(make_pair(p1[x],make_pair(p[x],x)));S.erase(it);}}printf("%d\n",ans);return 0;
}