[NOIP2017 提高组] 列队 题解

数据结构。

n = 1 n=1 n=1 的 case:考虑有 m + q m+q m+q 个位置,出队的人直接添加到队尾。维护位置对应的人,每次查询第 k k k 个人的位置。

实现考虑维护 01 序列,表示位置上是 / 否有人,每次查前缀和为 k k k 的位置即可。

一般情况:每次操作只会影响某一行以及最后一列。考虑将最后一列单独处理。

对于查询 ( x , y ) (x,y) (x,y):需查询第 x x x 行第 y y y 个人的位置以及最后一列第 x x x 个人的位置,维护一下对应编号, y = m y = m y=m 时只用查最后一列。

实现考虑离线树状树组或动态开点线段树,线段树 / 树状树组上二分可以做到 log ⁡ \log log,总时间复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn)

树状树组实现显然要离线,仅用一个 BIT 预处理每次非最后一列操作在对应行的位置。

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N = 3e5 + 5; 
const int V = 6e5;

int n, m, q, tree[N<<1], x[N], y[N], num[N];

int lowbit(int x) {return x&(-x);}
void add(int x, int d){for(;x <= V; x += lowbit(x)) tree[x] += d;}
int select(int k)
{
	int pos = 0, sum = 0;
	for(int i=20; i>=0; i--)
	{
		pos += (1 << i);
		if(pos > V or sum + tree[pos] >= k) pos -= (1 << i);
		else sum += tree[pos];
	}
	return pos + 1;
}

signed main()
{
	ios::sync_with_stdio(0); cin.tie(0);
	
	cin >> n >> m >> q;
	
	for(int i=1; i<=V; i++) tree[i] = lowbit(i);
	
	vector <vector<int>> cmd(n+1);
	
	for(int i=1; i<=q; i++)
	{
		cin >> x[i] >> y[i];
		if(y[i] != m) cmd[x[i]].push_back(i);
	}
	
	for(int i=1; i<=n; i++)
	{
		for(auto id : cmd[i])
			num[id] = select(y[id]), add(num[id], -1);
			
		for(auto id : cmd[i]) 
			add(num[id], 1);
	}
	
	vector <vector<int>> row(n+1);
	vector <int> column;
	
	for(int i=1; i<=q; i++)
	{
		int in, out, p = select(x[i]); 
        add(p, -1);
		if(y[i] != m)
		{
			out = (num[i] < m) ? ((x[i]-1)*m+num[i]) : row[x[i]][num[i]-m], 
            in = (p <= n) ? (p*m) : column[p-n-1];
			row[x[i]].push_back(in), column.push_back(out);
		}
		else
		{
			out = (p <= n) ? (p*m) : column[p-n-1];
			column.push_back(out);
		}
		cout << out << "\n";	
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode刷题详解——全排列

1. 题目链接&#xff1a;46. 全排列 2. 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],…

电源管理(PMIC)MAX20428ATIA/VY、MAX20428ATIC/VY、MAX20428ATIE/VY适合汽车ADAS应用的开关稳压器

一、概述 MAX20428是一款高效率、八路输出、低压PMIC。OUT1将输入电源升压至5V&#xff0c;电流高达500mA&#xff0c;而三个同步降压转换器的输入电压范围为3.0V至4.2V&#xff0c;输出电压范围为0.8V至3.9875V&#xff0c;峰值电流分别高达1.3A、1.3A和3.5A。三个300mA pMOS…

提升ChatGPT答案质量和准确性的方法Prompt engineering

文章目录 怎么获得优质的答案设计一个优质prompt的步骤:Prompt公式:示例怎么获得优质的答案 影响模型回答精确度的因素 我们应该知道一个好的提示词,要具备一下要点: 清晰简洁,不要有歧义; 有明确的任务/问题,任务如果太复杂,需要拆分成子任务分步完成; 确保prompt中…

Python接口自动化测试(接口状态)

本节开始&#xff0c;开始介绍python的接口自动化测试&#xff0c;首先需要搭建python开发环境&#xff0c;到https://www.python.org/下载python 版本直接安装就以了&#xff0c;建议 下载python2.7.11版本&#xff0c;当然&#xff0c;也是可以下载python最新版本的。 接口测…

本地部署Jellyfin影音服务器并实现远程访问影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

免费的 AI 视频生成工具 Moonvalley 厉害了!Moonvalley 怎么用(保姆级教程)

一、Moonvalley 介绍 Moonvalley&#xff0c;号称地表最强的 AI 视频生成工具&#xff0c;到底有多厉害&#xff1f;今天一起来看一下~ 这是 Moonvalley 官网的介绍&#xff1a; Moonvalley 是一个开创性的新型文本到视频的生成式 AI 模型。用简单的文本即可创建出惊人的电影和…

Linux下Jenkins自动化部署SpringBoot应用

Linux下Jenkins自动化部署SpringBoot应用 1、 Jenkins介绍 官方网址&#xff1a;https://www.jenkins.io/ 2、安装Jenkins 2.1 centos下命令行安装 访问官方&#xff0c;点击文档&#xff1a; 点击 Installing Jenkins&#xff1a; 点击 Linux&#xff1a; 选择 Red Hat/…

剑指offer --- 从尾到头打印链表

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 当我们需要访问单向链表中特定位置值时&#xff0c;算法复杂度往往是O(n)&#xff0c;在得到靠后节点的值时不可避免地从前向后遍历访问链表&#xff0c;那么当应题目要求从尾到头打印链表时&#xff0c;至少…

matlab双目标定中基线物理长度获取

在MATLAB进行双目摄像机标定时,通常会获得相机的内参,其中包括像素单位的焦距(focal length)以及物理单位的基线长度(baseline)。对于应用中的深度估计和测量,基线长度的物理单位非常重要,因为它直接影响到深度信息的准确性。有时候,您可能只能获取像素单位的焦距和棋…

布雷斯悖论和借贷式拥塞控制

先看布雷斯悖论&#xff0c;新增一条路不但没减少交通延滞&#xff0c;反而降低了服务水准&#xff0c;下面一个简单的例子&#xff1a; 关于布雷斯悖论的讨论已经太多&#xff0c;我给出个新解释&#xff0c;这和我引出 借贷式拥塞控制 (差论证和编码)有关。 看一个不严谨但更…

Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹

Airtest工具根据App页面文字信息提取坐标进行截图保存在自定义文件夹 一、项目背景 在一个项目中&#xff0c;选项被选中和未选中的节点元素的属性值无变化&#xff0c;通过AI识别率达不到百分百&#xff0c;想着通过计算图片的HSV值来判断选择能否被选中。&#xff08;HSV比…

聊聊我对AI Agents技术的一些看法

小伙伴们&#xff01;我来兑现承诺啦&#xff5e; ps&#xff1a;接下来期待什么内容&#xff0c;欢迎在评论区留言&#xff01; 今天&#xff0c;我们就来聊聊大模型 Agent。 最近这几个月&#xff0c;Agent 这一概念可谓火出天际&#xff0c;从 AutoGPT 一周 6 万 star 刷新…

云安全—K8s APi Server 6443 攻击面

0x00 前言 在未授权的一文中&#xff0c;详细描述了k8s api中的8080端口未授权的问题&#xff0c;那么本篇主要来说6443端口的利用。 0x01 API连接攻击面 1.匿名用户访问 匿名开放方式&#xff1a;kubectl create clusterrolebinding cluster-system-anonymous --clusterro…

K8S部署时IP问题

本次环境搭建需要安装三台Centos服务器&#xff08;一主二从&#xff09;&#xff1b;搭配的前提时做好ip的设置 主机IP规划 IP地址的设定需要根据自己主机来设置&#xff0c;在虚拟机的虚拟网络编辑器中看他给你的ip&#xff1b;不要查什么ipconfig了。 在虚拟网络编辑器中…

Ansible中的任务执行控制

循环 简单循环 {{item}} 迭代变量名称 loop: - value1 - value2 - ... //赋值列表{{item}} //迭代变量名称循环散列或字典列表 - name: create filehosts: host1tasks:- name: file moudleservice:name: "{{ item.name }}"state: "{{…

UG\NX二次开发 先设置默认颜色再创建对象

文章作者:里海 来源网站:里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 qq_42461973 订阅本专栏,非常感谢。 简介 有粉丝问,可不可以先设置默认颜色再创建对象?这个是可以的,下面是例子: 效果 代码 #include "me.hpp" using namespace std;

毅速丨3D打印结合拓扑优化让轻量化制造更容易

轻量化可以减少产品的重量&#xff0c;提高产品的性能和效率&#xff0c;同时减少能源消耗和排放。尤其在航空航天、汽车制造造等行业对轻量化追求更高。当前&#xff0c;随着制造技术的发展&#xff0c;拓扑优化结合3D打印为轻量化制造带来的显著的优势正在逐渐凸显。 首先&am…

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

一分钟精华速览 分布式链路追踪系统在企业的APM体系中扮演着重要的角色。本文分享了去哪儿旅行构建分布式链路追踪系统的实践经验。从APM整体架构设计入手&#xff0c;讲述了日志收集、Kafka传输和Flink任务处理等环节的性能优化实践和踩坑经验。 同时&#xff0c;作者结合丰…

绝地求生msvcp140.dll丢失报错怎么办,这四个方法都可以解决

在回答这个问题之前&#xff0c;我们先来了解一下什么是msvcp140.dll。msvcp140.dll是微软Visual C 2015 Redistributable的一个组件&#xff0c;它包含了许多运行库文件&#xff0c;用于支持各种应用程序的正常运行。当你在玩《绝地求生》&#xff08;俗称“吃鸡”&#xff09…

深入了解 CPU 的型号、代际架构与微架构

大家好&#xff0c;我是飞哥&#xff01; 在 10 月 16 号的时候&#xff0c;Intel 正式发布了第 14 代的酷睿处理器。但还有很多同学看不懂这种发布会上发布的各种 CPU 参数。借着这个时机&#xff0c;我给大家深入地讲讲 CPU 的型号规则、代际架构与微架构方面的知识。 CPU 在…
最新文章