题解:AT_abc391_c [ABC391C] Pigeonhole Query

额这篇和上一篇当初不知道为什么没有放到博客园上,现在才想起来,见谅。

question

\(N\) 只鸽子,编号从 \(1\)\(N\),有 \(N\) 个鸽巢,编号从 \(1\)\(N\)。最初,鸽子 \(i\) 在巢 \(i(1\leq i\leq N)\) 中。

您会收到 \(Q\) 个查询,您必须按顺序处理这些查询。查询有两种类型,每种都以下列格式之一给出:

  • 1 P H :将鸽子 \(P\) 移到鸽巢 \(H\) 中。
  • 2 :输出包含一只以上鸽子的鸽巢数量。

solution

首先我们解决操作 \(1\)

我们让 \(a_i\) 表示巢 \(i\) 的鸽子数量,同时让 \(b_i\) 表示鸽子 \(i\) 目前所处的巢相对于初始的巢 \(i\) 偏移了多少。

那么我们可以得到以下代码。

if (opt == 1){int p, h;cin >> p >> h;int now = p + b[p];// 鸽子 p 目前所处的巢的编号为 nowa[now]--;a[h]++;b[p] = h - p;// 更新b[i]
}

接下来我们考虑操作 \(2\)

显然不能每次的扫一遍 \(a\) 数组,所以我们在操作 \(1\) 中加一步。对于每次操作 \(1\),有可能对答案做出贡献的只有 \(a_{now}\)\(a_h\),所以我们进行分类讨论。

  • \(a_{now}\) 操作完后等于 \(1\),则说明 \(a_{now}\) 操作之前一定符合条件,那么我们让答案减 \(1\)

  • \(a_h\) 操作完后大于 \(1\),且 \(a_h\) 操作之前不符条件,那么我们让答案加 \(1\)

为了方便,我们记录 \(f_i\) 表示巢 \(i\) 当前是否符合条件。整体思路出来了,以下是完整代码。

#include <bits/stdc++.h>
using namespace std;#define int long longconst int N = 1e8 + 5;int n, q; 
int a[N], b[N];
int cnt;
bool f[N];signed main(){cin.tie(0)->sync_with_stdio(0);cin >> n >> q;for (int i = 1; i <= n; i++)// 给 a 数组付赋初值a[i] = 1;while (q--){int opt;cin >> opt;if (opt == 1){int p, h;cin >> p >> h;int now = p + b[p];a[now]--;a[h]++;b[p] = h - p;if (a[now] == 1) cnt--, f[now] = 0;if (a[h] > 1 && !f[h]) cnt++, f[h] = 1;}else if (opt == 2)cout << cnt << "\n";}return 0;
}

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

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

相关文章

解决Windows11可能出现的自动获取到错误的DNS地址问题

现象 当一个wifi再射中中配置了手动的DNS地址,如114.114.114.114/114.114.115.115,连接其他新wifi的时候,虽然默认自动获取DNS,但是获取的却不是路由配发的DNS,而是之前设置的114.114.114.114/114.114.115.115 解决方案 1、首先打开旧ui的网卡的设置,确定处于自动dns。2、…

docker在mac-m1芯片部署并启用tomcat

手把手教你使用docker在mac-m1芯片部署并启用tomcat 1,下载docker并安装 登陆官网下载dockr,选择mi芯片的docker下载 下载地址:https://www.docker.com/get-started 2,配置docker的阿里云加速器(也可以配置其他加速器) 在设置---docker engine 中添加阿里云的加速器 {&quo…

JS-51 事件代理(事件委托)

由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父结点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理(delegation)var ul =document.querySelector(ul);ul.addEventListenr(click,function(event){if(event.target.tagN…

docker搭建jenkins导入python包

title: docker搭建jenkins导入python包 tags: - docker - centos - jenkins categories: - docker1. 项目概述 2. 环境准备 3. 创建 Dockerfile 4. 创建 Docker Compose YAML 文件 services volumes5. 同级目录放requirements.txt 6. 启动 Jenkins 服务 7. 访问 Jenkins 8. 验…

普通人做短剧需要哪些证书?

短剧行业爆火,但在制作短剧需持有相关资质,否则就属于违规经营。不管是想在各大平台宣传推广,还是想上架小程序等途径都是要求三证齐全的。 那应该先取得什么样的资质才可以开展这项业务? 第一个就是增值电信业务经营许可证—ICP许可证这是从事互联网行业的基本要求,它的申…

DeepSeek如何在资源优化时做到了性能领先?

问题:DeepSeek如何在资源优化时做到了性能领先? DeepSeek V3的Benchmark如图3所示,该图显示DeepSeek V3在主要数据集测试时超越了业界LLM同类标杆的水平,这给了业界一个初步的惊喜,尤其是训练阶段花费了少于业界LLM同类标杆十分之一的代价:图3:DeepSeek V3如何以更少资源…

【ABAP】使用vscode+cline+deepseek进行abap的开发

声明:本文主要进行的是演示,实际项目中的应用还需要大家的探索 前置条件: 1. vscode 安装abap的插件 2. 注册deepseek的api key 或者 硅基流动的 apikey (最近deepseek遭受攻击不太稳定,推荐使用硅基流动的deepseek模型)deepseek api平台硅基流动注册 3. vscode安装clin…

vxe-table 如何实现全部单元格都能拖拽调整列宽,表头和表体都支持拖拽

vxe-table 如何实现全部单元格都能拖拽调整列宽,表头和表体都支持拖拽 官网:https://vxetable.cn 效果代码 通过 resizable-config.isAllColumnDrag 启用所有单元格允许拖拽调整列宽 <template><div><vxe-grid v-bind="gridOptions"></vxe-gr…

初探集群联邦

本文分享自天翼云开发者社区《初探集群联邦》,作者:echooo 一.什么是集群联邦?集群联邦(Federation)是将多个kubenetes集群注册到统一的控制平面,为用户提供统一API入口的多集群解决方案。集群联邦设计的核心是提供在全局层面对应用的描述能力,并将联邦对象实例化为kub…

DeepSeek开源o1击毙OpenAI,强化学习惊现「啊哈」时刻!网友:AGI来了

DeepSeek开源o1击毙OpenAI,强化学习惊现「啊哈」时刻!网友:AGI来了 AI生成摘要摘要 中国版o1刷屏全网。DeepSeek R1成为世界首个能与o1比肩的开源模型,成功秘诀竟是强化学习,不用监督微调。AI大佬们一致认为,这就是AlphaGo时刻。自由讨论详情 一觉醒来,AGI就实现了?!…

多种路径规划方案,满足应用个性化导航需求

在快节奏的都市生活中,路径规划已成为日常出行的核心环节。用户无论前往何地,都期望能够迅速获取所有可能的路线,并根据预估的出行时间,轻松挑选出最适合自己的出行方案。在现代生活中,路径规划的需求无处不在,从导航应用中的个性化路线推荐,到外卖服务中的高效配送规划…

npm ERR missing script dev

没有dev脚本 看一下你的package.json 文件里面是哪个脚本 执行 npm run serve