P3285 [SCOI2014] 方伯伯的OJ

news2024/9/16 15:32:04

*原题链接*

本题与NOIP2017列队有很多共通之处,都是一开始给我们一个排好编号的队列,然后进行一些操作。

如果n的范围不大,我们会如何做呢?很容易想到权值线段树,以编号为下标建立权值线段树,维护每个下标上有多少数,接下来的操作就很容易了。

但本题n过于大,不过我们很容易发现,初始状态很容易计算,所以只需要设法维护操作后的状态。例如此题,有编号和排名,我们就可以用两个map维护编号为x的排名,排名为x的编号。

对于权值线段树,我们采用动态开点的技巧,并且不去具体维护有多少个数,而是维护移动过多少个数,这样就避免MLE和TLE。

时间复杂度O(mlogn),空间复杂度O(mlogn)

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10,INF=1e8+N;

//fast read,fast write
int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
	return x*f;
}
void write(int x){
	if(x<0) putchar('-'),x=-x;
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
void print(int x){
	write(x),cout<<endl;
}

int n,m,root,idx,la,ls[N],rs[N],sum[N],L,R;
map<int,int> id,id2;

void modify(int &u,int x,int l,int r){
	if(!u) u=++idx;sum[u]++;
	if(l==r) return;
	int mid=(l+r)>>1;
	if(x<=mid) modify(ls[u],x,l,mid);
	else modify(rs[u],x,mid+1,r);
}

int query(int u,int x,int l,int r){
	if(!sum[u]||l==r) return 0;
	int mid=(l+r)>>1;
	if(x<=mid) return query(ls[u],x,l,mid);
	return query(rs[u],x,mid+1,r)+sum[ls[u]];
}

int findkth(int u,int k,int l,int r){
	if(l==r) return l;
	int mid=(l+r)>>1,res=max(0,min(R,mid)-max(L,l)+1-sum[ls[u]]);
	if(k<=res) return findkth(ls[u],k,l,mid);
	return findkth(rs[u],k-res,mid+1,r);
}

void change(int x,int y){
	int pos=(id.find(x)==id.end())?x:id[x];
	la=pos-L+1-query(root,pos,-INF,INF),id[y]=pos,id2[pos]=y;
}

void work1(int x){
	int pos=(id.find(x)==id.end())?x:id[x];
	la=pos-L+1-query(root,pos,-INF,INF),modify(root,pos,-INF,INF);
	id[x]=--L,id2[L]=x;
}

void work2(int x){
	int pos=(id.find(x)==id.end())?x:id[x];
	la=pos-L+1-query(root,pos,-INF,INF),modify(root,pos,-INF,INF);
	id[x]=++R,id2[R]=x;
}

void ask(int k){
	la=findkth(root,k,-INF,INF),la=(id2.find(la)==id2.end())?la:id2[la];
}

int main(){
	
	n=read(),m=read(),L=1,R=n;
	while(m--){
		int opt=read(),x,y;
		if(opt==1){
			x=read(),y=read(),x-=la,y-=la;
			change(x,y),print(la);
		}
		else if(opt==2) x=read(),work1(x-la),print(la);
		else if(opt==3) x=read(),work2(x-la),print(la);
		else x=read(),ask(x-la),print(la);
	}
	
	return 0;
}

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

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

相关文章

WEB攻防-ASP安全MDB下载植入IIS短文件名写权限解析

知识点&#xff1a; 1、ASP环境搭建组合&#xff1b; 2、ASP-数据库下载&植入&#xff1b; 3、IIS-短文件&解析&写权限&#xff1b; WEB安全攻防 1、web源码&#xff1b; 2、开发语言&#xff1b; 3、中间件平台&#xff1b; 4、数据库类型&#xff1b; 5、…

百度快照劫持之JS劫持诊断与恢复一例

劫持现象&#xff1a; 百度搜索结果中&#xff0c;被劫持网站出现在搜索结果中&#xff0c; 点击进入网站&#xff0c;网站显示正常&#xff0c;数秒后网站自动跳转到彩票网站f51688.com/ff6/。但是第二次点击搜索结果&#xff0c;正常进入网站缺不会跳转到彩票网站。 初步认…

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理&#xff0c;打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名…

GO语言快速入门(比较乱)

一、环境安装 1、安装Go环境 1、官网下载 2、cmd-->go version 3、环境变量 GOROOT&#xff1a;go安装路径 GOPATH&#xff1a;go存放代码的路径 4、GOWorks新建三个文件 5、go env查看配置 2、安装编辑器 GoLand或者VSCode 3、HelloWorld package main //一个程序只有一个…

设计模式学习[5]---装饰模式

文章目录 前言1. 原理阐述2. 举例2.1 人装饰方案一2.2 人装饰方案二2.3 人装饰方案三 总结 前言 近期在给一个已有的功能拓展新功能时&#xff0c;基于原有的设计类图进行讨论。其中涉及到了装饰模式&#xff0c;因为书本很早已经看过一遍&#xff0c;所以谈及到这个名词的时候…

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统&#xff0c;并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址&#xff08;Addressable&#xff09;时&#xff0c;您可以使用该资源的地址从任何地方加载它。无论资源是在…

php转职golang第二期

以下是一份简单的 Go 基本语法笔记&#xff1a; 变量与常量&#xff1a; • var 声明变量。• const 声明常量。数据类型&#xff1a; • 整型、浮点型、布尔型、字符串型等。流程控制&#xff1a; • if-else 语句。• for 循环。函数&#xff1a; • 定义和调用函数。数…

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接&#xff1a;394. 字符串解码 1- 思路 栈实现四种情况处理 ① 遇到数字&#xff0c;进行倍数相加 、②遇到左括号&#xff0c;压栈之前的元素、③遇到右括号弹出&#xff0c;栈进行…

DFS 算法:洛谷B3625迷宫寻路

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 DFS 算法&#xff1a;记忆化搜索DFS 算法&#xf…

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation&#xff08;属性编辑&#xff09;、disentanglement&#xff08;解纠缠&#xff09;常用的两种做法&#xff1a;线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中&#xff0c;有一种非常简单的方法来引导G向某个方向进行生成&…

【Android】使用和风天气API获取天气数据吧!(天气预报系列之一)

【Android】使用和风天气API获取天气数据吧&#xff01;&#xff08;天气预报系列之一&#xff09; 古话说得好&#xff0c;要有天气预报&#xff0c;首先需要有天气&#xff0c;和预报。 今天给大家介绍一个好用的天气预报API&#xff1a;和风天气。以及webAPI的使用方法~&a…

【H2O2|全栈】关于HTML(3)HTML基础(二)

HTML相关知识 目录 HTML相关知识 前言 准备工作 标签的具体分类&#xff08;二&#xff09; 本文中的标签在什么位置使用&#xff1f; 本期前置知识点 超文本 超文本引用和源属性 图片标签 锚链接 iframe 锚点 预告和回顾 后话 前言 本系列博客将分享HTML相关…

JavaWeb后端开发总结(3)

AOP基础 AOP概述 首先我们要知道AOP是什么&#xff1f; 看下图 个人解析&#xff1a; AOP叫做面向切面编程&#xff0c;但是实际上就是面向方法编程 图中下面一部分是一个AOP的案例 AOP快速入门案例代码实现 案例&#xff1a;测出业务中各个业务方法所需的执行时间 如果…

怎么利用NodeJS发送视频短信

随着5G时代的来临&#xff0c;企业的数字化转型步伐日益加快&#xff0c;视频短信作为新兴的数字营销工具&#xff0c;正逐步展现出其大的潜力。视频群发短信以其独特的形式和内容&#xff0c;将图片、文字、视频、声音融为一体&#xff0c;为用户带来全新的直观感受&#xff0…

单片机DMA原理及应用详解(上篇)(附工程源码)

这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获&#xff01; 目录 一、DMA简介 二、DMA原理 三、DMA中断 1. DMA中断的工作原理 2. DMA中断的优点 3. DMA中断的配置和处理 4. 应用场景 四、结语 一、DMA简介 1、DMA&#xff08;D…

数据分析训练模型后输出模型评估报告

数据分析训练模型后输出模型评估报告 1、模型评估指标 1.1、概念: A:n个正样本,检测到是真值的数量 B:m个负样本,检测到是真值的数量 C:n个正样本,检测到假值的数量 D:m个负样本,检测到假值的数量 1.2、准确率(Accuracy) 正确预测的样本数量与总样本数量的比值。…

轨迹规划-B样条

B样条究竟是干啥的&#xff1f;白话就是给出一堆点&#xff0c;用样条的方式&#xff0c;给这些点连接起来&#xff0c;并保证丝滑的。 同时B样条分为准均匀和非均匀&#xff0c;以下为准均匀为例。 参考链接1&#xff1a;https://zhuanlan.zhihu.com/p/50626506https://zhua…

IP宿主信息在不同领域的广泛应用

在网络世界中&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;扮演着至关重要的角色。而IP宿主信息&#xff0c;通过IP与POI/AOI信息关联&#xff0c;能够帮助用户了解特定IP地址所属的详细信息。本文将深入探讨IP宿主信息在不同领域的广泛应用。 什么是IP宿主信息&…

汽车功能安全--TC3xx之PBIST、MONBIST

目录 1.PMS 电源监控速览 2.PBIST 3.MONBIST 4.小结 1.PMS 电源监控速览 英飞凌TC3xx芯片的四种硬件机制&#xff0c;分别是&#xff1a; PMS:PBIST: Power Built-in Self Test. MCU:LBIST: Logic Built-in Self Test. PMS:MONBIST: Monitor Built-in Self Test. VMT:MBI…

嵌入式基础1-模拟电路技术-3.放大电路

1. 基本放大电路 1. 放大概念与放大电路性能指标 2. 基本共射放大电路工作原理 3. 放大电路的分析方法 阻容耦合 4.案例 2. 多级放大电路 1. 多级放大电路的耦合方式 2. 多级放大电路动态分析 3. 差分放大电路 3. 集成运算放大电路 4. 放大电路的反馈 1. 反馈的基本概念…