……啊开始颓了。

【题目大意】

已知当前集合最大容量为m,n个询问。每次询问一个元素,如果集合中没有则需要加入该元素,如果集合已经满了则需要先删去集合中的某些元素再加入。问至少要加入几次元素?

【思路】

显然每一次删除的元素是下一次出现最晚的那一个,优先队列维护一下就好了。

【错误点】

非常ZZ地把集合满的条件定为了“que.size()==m”,实际上如果该元素已经存在,我们更新下一次出现的时候原来的在优先队列中是不删除的。所以必须另外设一个qsize记录集合中有几个元素存在。

 #include<bits/stdc++.h>
using namespace std;
const int MAXN=;
typedef pair<int,int> p;
const int INF=0x7fffffff;
int n,m,a[MAXN],d,hash[MAXN];
int rcap[MAXN],nap[MAXN];//recently appear & next appear
priority_queue<p> que;
int inque[MAXN],qsize; void init()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&a[i]),hash[i]=a[i];
sort(hash+,hash+n+);
d=unique(hash+,hash+n+)-(hash+);
for (int i=;i<=n;i++) a[i]=lower_bound(hash+,hash+d+,a[i])-hash;
for (int i=;i<=n;i++) rcap[i]=nap[i]=INF;
for (int i=;i<=n;i++)
{
if (rcap[a[i]]!=INF) nap[rcap[a[i]]]=i;
rcap[a[i]]=i;
}
} void solve()
{
int ans=;
memset(inque,,sizeof(inque));
qsize=;
for (int i=;i<=n;i++)
{
if (!inque[a[i]])
{
if (qsize==m) //这里不能用que.size()代替,因为相同元素可能都在优先队列里呢
{
inque[que.top().second]=;
que.pop();
qsize--;
}
inque[a[i]]=;
ans++;
qsize++;
}
que.push(p(nap[i],a[i]));
}
printf("%d\n",ans);
} int main()
{
init();
solve();
return ;
}

【优先队列+贪心】BZOJ1826-[JSOI2010]缓存交换的更多相关文章

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

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

  2. BZOJ1826 [JSOI2010]缓存交换 堆 贪心

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1826 题意概括 Cache中有m个储存单元,接下来有n个访问地址,每个地址用一个数字表示.访问每一 ...

  3. [bzoj1826] [JSOI2010]缓存交换

    虽然不知道为什么..但显然,每次扔掉离下次查询最远的内存单元就行了233 用堆来维护贪心...(优先队列大法好 #include<cstdio> #include<iostream& ...

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

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

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

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

  6. 1826: [JSOI2010]缓存交换

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

  7. B1826 [JSOI2010]缓存交换 贪心+离散化+堆

    这个题仔细一想可以直接贪心做,因为队列里下一个出现的早的一定最优.正确性显然.然后我只拿了50,我直接模拟另一个队列暴力修改最后一个点的nxt值,自然会T.但是其实不用修改,直接插入就行了前面的不影响 ...

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

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

  9. [JSOI2010]缓存交换 贪心 & 堆

    ~~~题面~~~ 题解: 首先我们要使得Miss的次数尽量少,也就是要尽量保证每个点在被访问的时候,这个点已经存在于Cache中. 那么我们可以得到一个结论: 如果Cache已满,那么我们就从Cach ...

随机推荐

  1. 异步消息处理机制Handler

    Android 中的异步消息处理主要由四个部分组成,Message.Handler.MessageQueue 和Looper. 1. Message Message 是在线程之间传递的消息,它可以在内 ...

  2. 何凯文每日一句打开||DAY8

  3. 蓝桥杯 大臣的旅费_树的最长度_两次DFS

    #include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> ...

  4. 微软官网给出CSS选择器支持列表

    CSS Compatibility and Internet Explorer 这是在 @司徒正美 博客里看到的,所以搬到自己博客,收藏下..正如司徒兄所说,微软太狡滑了,如果把不支持的属性用红色标示 ...

  5. 为ASP.NET控件加入快捷菜单

    ContextMenu Control 快捷菜单控件概述: MSDN Liabrary 中包含了几个DHTML快捷菜单的示例.分别提供了对这一功能的不能实现方法.一个快捷菜单就是在页面中任何位置的一组 ...

  6. expect 交互 模拟ssh 登陆

    模拟ssh登录 #!/bin/bash Ip='192.168.1.6' # 循环就行 RemoteUser='user' # 普通用户 RemotePasswd='userpasswd' # 普通用 ...

  7. HDU 1229 还是A+B(A+B陶冶情操)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1229 解题报告:A+B #include<cstdio> int main() { int ...

  8. linux的lemon安装示范

    \(First\): 1. 准备好 lemon原文件 2. 解压压缩包(名字必须是lemon) 第二步:找到readme.md这个文件 第三步:了解一下安装指南 第四步:打开终端 注意:源代码目录就是 ...

  9. 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)

    相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...

  10. csfb

    SELECT CSDBTOGSMALLSuccessRate,CSFBTOGSMMODelay,CSFBTOGSMMODropRate,CSFBTOGSMMOFRStartCount,CSFBTOGS ...