贪心,CF802B. Heidi and Library

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 802A - Codeforces


二、解题报告

1、思路分析

这个题相当于你有一个容量为K的Cache,然后给你一系列访存序列

当访问缺失时你不得不替换掉Cache中某些块

学过操作系统都很熟悉页面置换算法里面有个预言家算法,最佳置换算法

即我们不得不替换时,选择替换掉将来最晚被访问的块,这样能够最大限度下降低缺页率

换到本题,我们不得不扔掉某些书的时候,我们扔掉最晚被借用的书,这样更能够让别的书发挥其作用,降低代价到最低,为什么这样正确呢?我们每次访问无非访问成功或者访问缺失,我们这样最大化了访问成功,自然最小化了访问缺失

2、复杂度

时间复杂度: O(nlogn)空间复杂度:O(n)

3、代码详解

#include <bits/stdc++.h>
using PII = std::pair<int, int>;
using i64 = long long;const int inf = 1e9;void solve() {int N, K, res = 0;std::cin >> N >> K;std::vector<int> a(N);std::map<int, std::vector<int>> pos;std::unordered_set<int> buf;std::priority_queue<PII> pq;for (int i = 0; i < N; i ++ ) std::cin >> a[i];for (int i = N - 1; ~i; i -- ) pos[a[i]].push_back(i);for (int i = 0; i < N; i ++ ) {pos[a[i]].pop_back();if (buf.count(a[i])) {if (pos[a[i]].size()) pq.emplace(pos[a[i]].back(), a[i]);else buf.erase(a[i]);continue;}while (pq.size() && !pos[pq.top().second].size()) pq.pop();if (buf.size() == K) buf.erase(pq.top().second), pq.pop();if (pos[a[i]].size()) buf.insert(a[i]), pq.emplace(pos[a[i]].back(), a[i]);res ++;}std::cout << res;
}int main () {std::ios::sync_with_stdio(false);   std::cin.tie(0);  std::cout.tie(0);int _ = 1;// std::cin >> _;while (_ --)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

anaconda怎么运行python

一、在Anaconda Navigator中运行 首先点击菜单栏中的“开始”&#xff0c;在搜索栏中输入“Anaconda”&#xff0c;然后选择“Anaconda Navigator”。 进入主界面&#xff0c;点击“Spyder”中的“Launch”即可。 然后按F5键运行即可。 二、在Anaconda Prompt中运行 也可以在…

Linux - 高级IO

目录 理解五种IO模型非阻塞IO的设置多路转接之select 实现一个简易的select服务器select服务器的优缺点 多路转接之poll 实现一个简易的poll服务器poll服务器的优缺点 多路转接之epoll epoll原理epoll的优势用epoll实现一个简易的echo服务器 epoll的LT和ET工作模式 什么是LT和…

PasteSpider之阿里云OSS功能的设计初衷

前言 在版本v24.6.2.1之后&#xff0c;有一个菜单"OSS配置"&#xff0c;这个配置是干嘛用的呢&#xff1f; 阿里云OSS&#xff0c;或者说云盘&#xff0c;我觉得也可以当CDN使用&#xff0c;比如我们部署了一个网站&#xff0c;为了减少服务器的承载&#xff0c;可以…

数据结构汇总

等同于&#xff1a; 旋转的时候忽略Nil,选装完再加上。

线性数据结构-链表

链表&#xff1a;线性数据结构&#xff08;一维数组结构&#xff09; 线性的数据结构强调存储和顺序 单向链表&#xff08;也称为单链表&#xff09;是一种简单的数据结构&#xff0c;其中每个节点包含两个部分&#xff1a;一个是数据元素&#xff08;或称为值&#xff09;&am…

好用的linux链接工具

工具下载链接&#xff1a; FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.3.10,更新日期2023.12.31 - FinalShell官网FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功…

引领未来,ArmSoM-Sige5震撼发布:RK3576芯片搭载,多媒体应用新宠

在数字化浪潮的推动下&#xff0c;ArmSoM-Sige5携手Rockchip RK3576第二代8纳米高性能AIOT平台&#xff0c;以颠覆性的性能和多功能性&#xff0c;成为多媒体应用的新宠儿。这一全新产品不仅拥有6 TOPS算力NPU和最大可配16GB大内存&#xff0c;更支持4K视频编解码&#xff0c;具…

Simulink从0搭建模型10-P11 建模练习 搭建简易车辆动力学模型

Simulink从0搭建模型10-P11 建模练习 搭建简易车辆动力学模型 前言参考1. 车辆纵向动力学模型2. 相关参数定义3. 车辆动力学模型搭建&#xff08;简易&#xff09;3.1. 思路3.2. 模型解析3.2.1. 输入扭矩3.2.2. 滚动阻力 Ff 部分3.2.3. 坡度阻力 Fi 部分3.2.4. 加速阻力 Fj 部分…

2024年比较火的桌面便利贴,适合懒人的电脑便签

在2024年的数字化生活中&#xff0c;高效的电脑便签软件成为了许多“懒人”提升生产力的秘密武器。这些软件不仅让信息记录变得轻松快捷&#xff0c;还能帮助用户有效管理时间&#xff0c;减少遗忘&#xff0c;让桌面保持整洁有序。 其中&#xff0c;“好用便签”以简洁的设计…

哈希重要思想续——布隆过滤器

布隆过滤器 一 概念1.1布隆过滤器的提出2.概念 二 模拟实现2.1 三个仿函数setTest 全代码三 实际应用 一 概念 1.1布隆过滤器的提出 我们在使用新闻客户端看新闻时&#xff0c;它会给我们不停地推荐新的内容&#xff0c;它每次推荐时要去重&#xff0c;去掉那些已经看过的内容…

【数学】填不同的自然数 1/9=1/()+1/()+1/()+1/()+1/()

填不同的自然数 1 9 1 ( ) 1 ( ) 1 ( ) 1 ( ) 1 ( ) \frac{1}{9}\frac{1}{(\text{ })}\frac{1}{(\text{ })}\frac{1}{(\text{ })}\frac{1}{(\text{ })}\frac{1}{(\text{ })} 91​( )1​( )1​( )1​( )1​( )1​ 推理&#xff1a; 1 1 − 1 2 1 2 − 1 3 1 3 … − 1…

springboot管理的各依赖版本查看

找一个springboot相关的依赖&#xff0c;比如这里我找mybatis 鼠标点击artifactId名称&#xff0c;图中蓝色字段&#xff0c;跳转到springboot依赖&#xff08;鼠标悬停在上面变成蓝色表示可点击跳转&#xff09;&#xff0c; 点击spring-boot-dependencites&#xff0c;跳转到…

python用tanh画图

用tanh函数画图 圆形 import numpy as np import matplotlib.pyplot as plt# 创建一个二维网格 xx np.linspace(-1, 1, 1000) yy np.linspace(-1, 1, 1000) x_i, y_i np.meshgrid(xx, yy)# 圆的半径和中心 r 0.4 center_x, center_y 0, 0 # 假设圆心在(0, 0)# 计算每个网…

pandas添加行

方法1(df.append()) import pandas as pd# 创建一个空的DataFrame df pd.DataFrame(columns[Column1, Column2])# 新增一行数据 data {Column1: Value1, Column2: Value2} df df.append(data, ignore_indexTrue) print(df)raw_data {"Column1":"adafafa&quo…

探究JSON和XML:两种常见的数据交换格式之异同

在软件开发和数据交换领域&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;和XML&#xff08;eXtensible Markup Language&#xff09;是两种广泛使用的数据交换格式。它们都具有将数据结构化并在不同系统之间进行传输和解析的能力&#xff0c;但在实际应用…

详解redis配置文件

华子目录 基础配置查看配置文件位置启动redis时&#xff0c;指定加载的配置文件示例 include引用其他配置文件units单位大小写不敏感network网络配置bind配置方式示例 protected-mode功能概述默认值配置方法安全建议总结 porttcp-backlog1. 定义2. 默认值3. 优化建议4. 注意事项…

OpenEuler 的安装过程记录

一、下载openEuler镜像 1.2 打开官网&#xff0c;选择openEuler23.09 1.3 选择架构、场景以及软件包类型 初次使用的话基本上都是先安装虚拟机&#xff0c;我们大部分主机都是x86_64架构&#xff0c;场景的话就选服务器&#xff0c;软件版类型选择标准版&#xff0c;可以安装图…

【稳定检索/投稿优惠】2024年环境、资源与区域经济发展国际会议(ERRED 2024)

2024 International Conference on Environment, Resources and Regional Economic Development 2024年环境、资源与区域经济发展国际会议 【会议信息】 会议简称&#xff1a;ERRED 2024 大会地点&#xff1a;中国杭州 会议官网&#xff1a;www.icerred.com 会议邮箱&#xff1…

电子邮件注入

电子邮件注入 1.电子邮件注入概述2.在发送的电子邮件中注入3.绕过邮件网关白名单检查4.硬退信率DOS攻击 1.电子邮件注入概述 电子邮件注入是一种电子邮件安全漏洞&#xff0c;攻击者通过在输入字段中注入特殊字符或命令来操纵电子邮件的内容。这通常发生在电子邮件表单或应用程…

python中编码与解码简记

python中编码与解码简记 一、读取文本文件指定的编码方式二、字符串与字节格式互转三、Base64编码解码3.1Base64 编解码使用的参数类型3.2Base64 编码后的字符串显示3.3Base64 解码后的字符串显示 四、Quoted-Printable编码解码4.1Quoted-Printable编解码使用的参数类型4.2Quot…