洛谷

BZOJ

分析

贪心策略很好想,显然,当 \(cache\) 未满时,直接放进去就行了; \(cache\) 满了的时候,考虑交换哪一个,不难看出可以交换下一次出现最晚的那个。

注意:不开 \(map\) 过不了!

代码

#include <map>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define il inline
#define re register
#define maxn 100005
#define tie0 cin.tie(0),cout.tie(0)
#define fastio ios::sync_with_stdio(false)
#define File(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
using namespace std;
typedef long long ll;
typedef pair<int,int> P;template <typename T> inline void read(T &x) {T f = 1; x = 0; char c;for (c = getchar(); !isdigit(c); c = getchar()) if (c == '-') f = -1;for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);x *= f;
}priority_queue <P> q;
map <int, int> lst, inq;int n, m, ans;
int a[maxn], nxt[maxn];int main() {memset(nxt, 1, sizeof(nxt));read(n), read(m);for (int i = 1; i <= n; ++i) {read(a[i]);nxt[lst[a[i]]] = i;lst[a[i]] = i;}for (int i = 1; i <= n; ++i) {if (inq[a[i]]) {q.push(make_pair(nxt[i], a[i]));m++;continue;}if (q.size() < m) {q.push(make_pair(nxt[i], a[i]));ans++; inq[a[i]] = 1;continue;}int k = q.top().second; q.pop();inq[k] = 0;q.push(make_pair(nxt[i], a[i]));inq[a[i]] = 1;ans++;}printf("%d", ans);return 0;
}

转载于:https://www.cnblogs.com/hlw1/p/11437155.html

JSOI2010 BZOJ1826 缓存交换相关推荐

  1. 程序员面试金典——17.1无缓存交换

    程序员面试金典--17.1无缓存交换 主要是利用异或性质~ 程序员面试金典--17.1无缓存交换 class Exchange { public:vector<int> exchangeA ...

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

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

  3. bzoj1826: [JSOI2010]缓存交换

    传送门 界定内存放进去还是出来的是他下一次出现的位置(没有是n+1) 显然先出现的比后出现的更优. 然后优先队列水一波. #include<cstdlib> #include<ios ...

  4. 1826: [JSOI2010]缓存交换

    Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除一 ...

  5. [bzoj1826][贪心]缓存交换

    Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除一 ...

  6. [BZOJ]1826: [JSOI2010]缓存交换 线段树

    Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache.此时,如果Cache容量已满,则必须先从中删除一 ...

  7. 【BZOJ1826】【tyvj2644】缓存交换,贪心+堆维护

    传送门1 传送门2 写在前面:Shallwe回家养病依然努力刷题,实乃我辈楷模 思路:比较容易想到的贪心思路(虽然一开始我对这个思路有点虚,因为太弱不会证明,大体理解一下就好= =),用堆维护一下ne ...

  8. 【bzoj 18261528】: [JSOI2010]缓存交换

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1826 http://www.lydsy.com/JudgeOnline/problem.ph ...

  9. bzoj 1826 缓存交换

    题目大意: 一些数,需要将他们依次取入一个集合中 集合的容量有限 若该数已经在集合中则不用再取 每次取的时候可以将集合中与元素替换为另一个,也可以不换,直接加入前提是不超过集合容量 求最后最小的取数次 ...

最新文章

  1. 强行分类提取特征自编码网络例4
  2. SAP Spartacus 服务器端渲染调试的开发端版本
  3. 【Linux高频命令专题(23)】tar
  4. 电脑一直弹出传奇游戏网页弹窗怎么办
  5. android textview电话号码,Android应用开发之Android EditTextView 实现带空格分隔的输入(电话号码,银行卡)...
  6. 实现C++与C的混合编程
  7. nginx部署前端代码 负载均衡
  8. Unity资源替换工具,旧模型替换新模型,替换GUID,替换meta文件,文件丢失等问题
  9. html设置图片为部分背景颜色,设置HTML的一个部分作为一个不同的背景颜色
  10. 微信小程序提示 本地域名不在以下 request 合法域名列表中,
  11. 利用装饰器模拟博客园登陆
  12. Latex 跨页图片跑到最后一页问题
  13. Li feifei How we're teaching computers to understand pictures
  14. mysql建表auto_increment_mysql create table auto_increment
  15. java英文参考文献_java英文参考文献
  16. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
  17. 【编解码:WebP协议】
  18. JSESSIONID、SESSION、cookie
  19. JQ中的“对象不支持此方法或属性”
  20. Duplicate entry ‘***‘ for key ‘UK_mjrobjw9m8n29ou6083ixjxmf‘

热门文章

  1. 一道有意思的阶乘计算题
  2. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程
  3. ANSYS2020R2 Workbench汉化及高分屏适配
  4. 【JavaScript总结】JavaScript语法基础:JS高级语法
  5. 【Sql Server】DateBase-事务
  6. vb中可视对象的操作
  7. 预见未来丨机器学习:未来十年研究热点
  8. 命名实体识别入门教程(必看)
  9. TVM vs TensorRT比较
  10. h265player开发