线段树。

处理出每个位置下一个位置是哪里。然后搞个线段树找一下最大值就可以了。

#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[];
bool In[];
 
int Seg[],nx[],p[];
int POS,sx[],A[];
 
void update(int p,int val,int l,int r,int rt)
{
    if(l==r)
    {
        Seg[rt]=val;
        return ;
    }
 
    int m=(l+r)/;
 
    if(p>=l&&p<=m) update(p,val,l,m,*rt);
    else update(p,val,m+,r,*rt+);
 
    Seg[rt] = max(Seg[*rt],Seg[*rt+]);
}
 
void get(int l,int r,int rt)
{
    if(l==r)
    {
        POS=l;
        return ;
    }
 
    int m=(l+r)/;
 
    if(Seg[*rt]>Seg[*rt+]) get(l,m,*rt);
    else get(m+,r,*rt+);
}
 
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=;i<=n;i++) scanf("%d",&a[i]);
 
        for(int i=;i<=;i++) p[i]=n+;
        for(int i=n;i>=;i--) nx[i] = p[a[i]], p[a[i]]=i;
 
        memset(In,,sizeof In);
        memset(Seg,,sizeof Seg);
        memset(sx,,sizeof sx);
        memset(A,,sizeof A);
 
        int sz=;
 
        for(int i=;i<=n;i++)
        {
            if(In[a[i]])
            {
                update(a[i],nx[i],,,);
                continue;
            }
            if(sz<m)
            {
                sz++;
                A[sz]=a[i]; sx[a[i]]=sz;
                update(a[i],nx[i],,,);
            }
 
            else
            {
                get(,,);
                update(POS,,,,);
 
                int t = sx[POS]; sx[POS]=; In[POS]=;
 
                update(a[i],nx[i],,,);
                sx[a[i]]=t; A[t]=a[i];
            }
 
            In[a[i]]=;
        }
 
        for(int i=;i<=sz;i++)
        {
            printf("%d",A[i]);
            if(i<sz) printf(" ");
            else printf("\n");
        }
    }
    return ;
}

ZSTU OJ 4272 最佳淘汰算法的更多相关文章

  1. 页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)

    页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:F ...

  2. 【操作系统】页面置换算法(最佳置换算法)(C语言实现)

    [操作系统]页面置换算法(最佳置换算法)(C语言实现) (编码水平较菜,写博客也只是为了个人知识的总结和督促自己学习,如果有错误,希望可以指出) 1.页面置换算法: 在地址映射过程中,若在页面中发现所 ...

  3. [Spark内核] 第34课:Stage划分和Task最佳位置算法源码彻底解密

    本課主題 Job Stage 划分算法解密 Task 最佳位置算法實現解密 引言 作业调度的划分算法以及 Task 的最佳位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心,这 ...

  4. 04 | 链表(上):如何实现LRU缓存淘汰算法?

    今天我们来聊聊“链表(Linked list)”这个数据结构.学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是+LRU+缓存淘汰算法. 缓存是一种提高数据读取性能的技术 ...

  5. c模拟内存分配算法(首次适应算法,最佳适应算法,最坏适应算法)

    #include<bits/stdc++.h> using namespace std; /*定义内存的大小为100*/ #define MEMSIZE 100 /*如果小于此值,将不再分 ...

  6. Stage划分和Task最佳位置算法源码彻底解密

    本课主题 Job Stage 划分算法解密 Task 最佳位置算法实现解密 引言 作业调度的划分算法以及 Task 的最佳计算位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心 ...

  7. 数据结构与算法之美 06 | 链表(上)-如何实现LRU缓存淘汰算法

    常见的缓存淘汰策略: 先进先出 FIFO 最少使用LFU(Least Frequently Used) 最近最少使用 LRU(Least Recently Used) 链表定义: 链表也是线性表的一种 ...

  8. 图解缓存淘汰算法三之FIFO

    1.概念分析 FIFO(First In First Out),即先进先出.最先进入的数据,最先出来.一个很简单的算法.只要使用队列数据结构即可实现.那么FIFO淘汰算法基于的思想是"最近刚 ...

  9. 图解缓存淘汰算法二之LFU

    1.概念分析 LFU(Least Frequently Used)即最近最不常用.从名字上来分析,这是一个基于访问频率的算法.与LRU不同,LRU是基于时间的,会将时间上最不常访问的数据淘汰;LFU为 ...

随机推荐

  1. HDU 5696 区间的价值 暴力DFS

    Problem Description 我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1). 现在聪明的杰西想要知 ...

  2. linux时区修定转

    https://blog.csdn.net/feng12345zi/article/details/80348501

  3. jsp 内置对象二

    1.什么是session ? (1)session 表示客户端与服务器的一次回话. 2)Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网 ...

  4. 【BZOJ】1529 [POI2005]ska Piggy banks

    [算法](强连通分量)并查集 [题解] 1.用tarjan计算强连通分量并缩点,在新图中找入度为0的点的个数就是答案. 但是,会爆内存(题目内存限制64MB). 2.用并查集,最后从1到n统计fa[i ...

  5. 基本控件文档-UILabel属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址   //转载请注明出处--本文永久链接:http://www.cnblogs.com/ ...

  6. 【洛谷 P1129】 [ZJOI2007]矩阵游戏 (二分图匹配)

    题目链接 看到题目肯定首先会想到搜索. 然鹅数据范围\(n<=200\)这么大(其实也不算太大),肯定是不行的. 如果\((i,j)\)是\(1\),从\(i\)向\(j\)连一条边,表示第\( ...

  7. Jquery checkbox 遍历

    checkbox 全选\全部取消 $("#ChkAll").click(function(){    $("#divContent input[type='checkbo ...

  8. JAVA Frame 响应窗口关闭事件

    /* * To change this license header, choose License Headers in Project Properties. * To change this t ...

  9. F题 hdu 1431 素数回文

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1431 素数回文 Time Limit: 2000/1000 MS (Java/Others)    M ...

  10. spring cloud config 详解

    Spring Cloud 为开发人员提供了一系列的工具来快速构建分布式系统的通用模型 .例如:配置管理.服务发现.断路由.智能路由.微代理.控制总线.一次性Token.全局锁.决策竞选.分布式sess ...