ZSTU OJ 4272 最佳淘汰算法
2017-03-22 18:49
218 查看
线段树。
处理出每个位置下一个位置是哪里。然后搞个线段树找一下最大值就可以了。
处理出每个位置下一个位置是哪里。然后搞个线段树找一下最大值就可以了。
#include<map> #include<set> #include<ctime> #include<cmath> #include<queue> #include<string> #include<stack> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<functional> using namespace std; int n,m,a[500010]; bool In[100010]; int Seg[400010],nx[500010],p[500010]; int POS,sx[500010],A[500010]; void update(int p,int val,int l,int r,int rt) { if(l==r) { Seg[rt]=val; return ; } int m=(l+r)/2; if(p>=l&&p<=m) update(p,val,l,m,2*rt); else update(p,val,m+1,r,2*rt+1); Seg[rt] = max(Seg[2*rt],Seg[2*rt+1]); } void get(int l,int r,int rt) { if(l==r) { POS=l; return ; } int m=(l+r)/2; if(Seg[2*rt]>Seg[2*rt+1]) get(l,m,2*rt); else get(m+1,r,2*rt+1); } int main() { while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=0;i<=100000;i++) p[i]=n+1; for(int i=n;i>=1;i--) nx[i] = p[a[i]], p[a[i]]=i; memset(In,0,sizeof In); memset(Seg,0,sizeof Seg); memset(sx,0,sizeof sx); memset(A,0,sizeof A); int sz=0; for(int i=1;i<=n;i++) { if(In[a[i]]) { update(a[i],nx[i],0,100000,1); continue; } if(sz<m) { sz++; A[sz]=a[i]; sx[a[i]]=sz; update(a[i],nx[i],0,100000,1); } else { get(0,100000,1); update(POS,0,0,100000,1); int t = sx[POS]; sx[POS]=0; In[POS]=0; update(a[i],nx[i],0,100000,1); sx[a[i]]=t; A[t]=a[i]; } In[a[i]]=1; } for(int i=1;i<=sz;i++) { printf("%d",A[i]); if(i<sz) printf(" "); else printf("\n"); } } return 0; }
相关文章推荐
- ZSTU-4272-最佳淘汰算法【优先队列】
- 最佳淘汰算法(OPT) 先进先出的算法(FIFO) 最近最久未使用算法(LRU)
- 2017浙理工校赛重现-G.最佳淘汰算法(优先队列模拟)
- ZSTU4272-最佳淘汰算法
- zstu 校赛 最佳淘汰算法 (优先队列)
- 缓存淘汰算法之LFU
- Golang分布式并发---群体性热点淘汰算法
- 二分图的最佳匹配(KM 算法)
- 缓存淘汰算法--LRU算法
- 求解最佳分配的算法问题
- c++面试题之求整数n范围内的全部质数最佳算法
- 使用最近未使用页淘汰(NRU)算法模拟实现页淘汰进程
- 缓存淘汰算法系列之3——FIFO类
- 【转】HMM学习最佳范例五:前向算法1 .
- 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
- 缓存淘汰算法系列之1 --- LRU
- 【两项业界最佳】普林斯顿新算法自动生成高性能神经网络,同时超高效压缩
- 1.7算法入门之最佳存款方案
- 转载 最佳路径的算法
- 【存储管理】请求淘汰换页算法先进先出算法(first input first output,FIFO)