题目大意:

一些数,需要将他们依次取入一个集合中

集合的容量有限

若该数已经在集合中则不用再取

每次取的时候可以将集合中与元素替换为另一个,也可以不换,直接加入前提是不超过集合容量

求最后最小的取数次数

思路:

可以想到一个贪心算法

就是下一次将要被取位置越远的书应该先被从集合中删除

因此我们可以使用优先队列这一STL来表示当前集合

当集合未满的时候不停的推入直到集合满

集合满的时候若元素不在集合中,则删除下一个位置最远的队首,然后加入

但是当元素在集合时,我们不能不予处理,需要更新它的下一次位置

但是这样非常难做,就需要我们把容量++,把这个新的元素加入队列

还要离散化。。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#define inf 2147483611
#define ll long long
#define MAXN 101010
using namespace std;
inline int read()
{
int x=,f=;
char ch;ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
struct pr
{
int next,val;
bool operator < (const pr &a) const
{
return next<a.next;
}
}a[MAXN];
struct data
{
int pos,val;
}g[MAXN];
bool cmp(data p,data q) {return p.val<q.val;}
int n,k,hash[MAXN],ans;
priority_queue <pr> q;
bool vis[MAXN];
int main()
{
n=read(),k=read();
for(int i=;i<=n;i++) g[i].val=read(),g[i].pos=i;
sort(g+,g+n+,cmp);
int cnt=;
for(int i=;i<=n;i++)
{
a[g[i].pos].val=cnt;if(g[i].val!=g[i+].val) cnt++;
}
for(int i=;i<=n;i++) hash[a[i].val]=i;
for(int i=n;i>=;i--)
{
if(hash[a[i].val]!=i) a[i].next=hash[a[i].val];
else a[i].next=inf;
hash[a[i].val]=i;
}
int i=;
while(ans<k&&i<=n)
{
if(!vis[a[i].val]) ans++;
q.push(a[i]);
vis[a[i].val]=;
i++;
}
for(i;i<=n;i++)
{
if(vis[a[i].val]) {q.push(a[i]);continue;}
vis[q.top().val]=;
vis[a[i].val]=;
q.pop();
q.push(a[i]);
ans++;
}
printf("%d",ans);
}

bzoj 1826 缓存交换的更多相关文章

  1. 1826: [JSOI2010]缓存交换

    1826: [JSOI2010]缓存交换 https://www.lydsy.com/JudgeOnline/problem.php?id=1826 分析: 简单的贪心,然后调啊调...最近怎么了,码 ...

  2. 【BZOJ1826】[JSOI2010]缓存交换(贪心)

    [BZOJ1826][JSOI2010]缓存交换(贪心) 题面 BZOJ 洛谷 题解 当缓存不满显然直接放进去,满了之后考虑拿走哪一个.不难发现拿走下一次出现时间最晚的那个一定不会更差. 那么用一个堆 ...

  3. BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心

    BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心 Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数 ...

  4. bzoj1528[POI2005]sam-Toy Cars*&&bzoj1826[JSOI2010]缓存交换

    bzoj1528[POI2005]sam-Toy Cars bzoj1826[JSOI2010]缓存交换 题意: Jasio有n个不同的玩具,它们都被放在了很高的架子上,地板上不会有超过k个玩具.当J ...

  5. 无缓存交换 牛客网 程序员面试金典 C++ Python

    无缓存交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值. 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回 ...

  6. BZOJ 2668 [cqoi2012]交换棋子 | 最小费用最大流

    传送门 BZOJ 2668 题解 同时分别限制流入和流出次数,所以把一个点拆成三个:入点in(x).中间点mi(x).出点ou(x). 如果一个格子x在初始状态是黑点,则连(S, mi(x), 1, ...

  7. BZOJ.2668.[CQOI2012]交换棋子(费用流zkw)

    题目链接 首先黑白棋子的交换等价于黑棋子在白格子图上移动,都到达指定位置. 在这假设我们知道这题用网络流做. 那么黑棋到指定位置就是一条路径,考虑怎么用流模拟出这条路径. 我们发现除了路径的起点和终点 ...

  8. BZOJ 2668: [cqoi2012]交换棋子

    2668: [cqoi2012]交换棋子 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1112  Solved: 409[Submit][Status ...

  9. Luogu P4404 [JSOI2010]缓存交换 优先队列

    细节题?...调了半天.... 可以发现,每一次从缓存中删除的主存一定是下次访问最晚的,可以用优先队列来处理...还有要离散化...还有链表末尾要多建一些点...否则会死的很惨... #include ...

随机推荐

  1. [Python3网络爬虫开发实战] 5.2-关系型数据库存储

    关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之 ...

  2. Python:用户自定义异常

    实际开发中,有时候系统提供的异常类型不能满足开发的需求.这时候你可以通过创建一个新的异常类来拥有自己的异常.异常类继承自 Exception 类,可以直接继承,或者间接继承. 1.自定义异常类型 #1 ...

  3. node assert.equal()

    浅测试,使用等于比较运算符(==)来比较 actual 和 expected 参数. const assert = require('assert'); assert.equal(1, 1); // ...

  4. ubuntu 16.4 安装mysql-python

    sudo apt-get install python-pip python-dev libmysqlclient-dev pip install MySQL-python

  5. C语言学习7

    结构体数组:实现简易通讯录 #include <stdio.h> #include <stdlib.h> #define NUM 3 struct person { ]; ]; ...

  6. 贪心 Radar Installation (求最少探测雷达)

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  7. stm32 调试时卡在LDR R0, =SystemInit

    网上找到的可能的原因 堆栈空间默认的太小 默认startup_stm32f10x_hd.s中 Stack_Size EQU 0x00000400,如果改大之后,可能调试就可以正常运行. 出现最多的情况 ...

  8. Leetcode 220.存在重复元素III

    存在重复元素III 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ. ...

  9. POJ1308/HDU1325/NYOJ129-Is It A Tree?,并查集!

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28838   Accepted: 9843 -& ...

  10. 2-sat相关知识

    转载:http://blog.csdn.net/luyuncheng/article/details/15172827 此题好纠结啊...其实2-sat关键是建边 此题网上好多题解都是直接说了建边而且 ...