bzoj 1826: [JSOI2010]缓存交换
2017-09-28 08:50
375 查看
题意:
求最少的调度次数。题解:
贪心。假如对于一个数,以后都没有出现过,那么一定可以换掉。
而对于其他的,记录下它下次出现的位置,那么将最远的换掉就可以了。
正确性显然。
code:
#include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> #include<algorithm> #include<map> #include<set> using namespace std; map<int,int> mp; int n,m,a[100010],tot=0; int nex[100010],ans=0; struct node{ int c,x; bool operator < (node a) const{return a.x>x;} }; set <node> q; int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=n;i>=1;i--) nex[i]=mp[a[i]],mp[a[i]]=i; mp.clear(); for(int i=1;i<=n;i++) { if(mp[a[i]]!=0) { node t=*q.begin(); q.erase(t); mp[t.c]=0; tot--; } else { if(tot!=m) ans++; else { node c=*(--q.end()); mp[c.c]=0; q.erase(c); tot--; ans++; } } if(nex[i]!=0) { node t;t.c=a[i];t.x=nex[i]; q.insert(t);mp[a[i]]=1; tot++; } } printf("%d",ans); }
相关文章推荐
- BZOJ1826: [JSOI2010]缓存交换
- bzoj1826: [JSOI2010]缓存交换
- BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心
- BZOJ 1826: [JSOI2010]缓存交换
- [bzoj1826] [JSOI2010]缓存交换
- 【优先队列+贪心】BZOJ1826-[JSOI2010]缓存交换
- 【bzoj 1826&1528】: [JSOI2010]缓存交换
- [BZOJ]1826: [JSOI2010]缓存交换 线段树
- 【BZOJ】【P1826&P1528】【JSOI2010】【缓存交换】【题解】【堆+贪心】
- 1826: [JSOI2010]缓存交换
- 1826: [JSOI2010]缓存交换
- 1826: [JSOI2010]缓存交换
- bzoj1826: [JSOI2010]缓存交换 贪心+优先队列
- 【BZOJ1826】【tyvj2644】缓存交换,贪心+堆维护
- 【贪心】【JSOI2010】缓存交换
- BZOJ 1821 JSOI2010 部落划分 Group Kruskal
- 【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波
- BZOJ1823 [JSOI2010]满汉全席 【2-sat】
- BZOJ 1821: [JSOI2010]Group 部落划分 Group
- BZOJ 1821 [JSOI2010]Group 部落划分 Group 题解与分析