【洛谷P4137】Rmq Problem / mex【主席树】

LangChain实战:用FAISS搭建本地文档问答系统(含Word文件处理避坑指南) 本文详细介绍了如何利用LangChain框架和FAISS向量数据库构建本地化智能文档问答系统,特别针对Word文档处理中的技术难点提供实用解决方案。通过模块化设计、本地化支持和多格式兼容,实现高效文档处理与精准问答,满足企业对数据隐私和安全的需求。 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P4137
有一个长度为 n n n的数组 { a 1 , a 2 , … , a n } \{a1,a2,…,an\} {a1,a2,…,an}。 m m m次询问,每次询问一个区间内最小没有出现过的自然数。


思路:

显然主席树。
对于第 k k k棵线段树,设叶子节点 i i i表示在数列前 k k k个数字中,数字 i i i出现的最后位置。
显然 a [ ] a[] a[]的范围是吓人的。最终答案一定不会 > n + 1 >n+1 >n+1,所以读入到 x ( x > n ) x(x>n) x(x>n)之后直接把 x x x变成 n + 1 n+1 n+1就可以了。
对于任意一个询问 x , y x,y x,y,意思就是说在第y棵线段树中找到第一个叶子结点最后出现的位置<l。
可以在任意区间 [ l , r ] [l,r] [l,r]中记录 m i n min min表示 [ l , r ] [l,r] [l,r]中最后出现位置最前的位置。
那么对于任意区间,如果左儿子 m i n min min小于 l l l,答案就在左边,否则在右边。
时间复杂度 O ( n   l o g   n ) O(n\ log\ n) O(n log n)


代码:

#include <cstdio>
#include <algorithm>
using namespace std;

const int N=200010;
int n,T,tot,x,y,root[N];

struct Tree
{
	int ls,rs,last,min;
}tree[N+N*20];

int build(int l,int r)
{
	int p=++tot;
	if (l==r) return p;
	int mid=(l+r)/2;
	tree[p].ls=build(l,mid);
	tree[p].rs=build(mid+1,r);
	return p;
}

int insert(int now,int l,int r,int x,int val)
{
	int p=++tot;
	tree[p]=tree[now];
	if (l==r)
	{
		tree[p].last=tree[p].min=val;
		return p;
	}
	int mid=(l+r)/2;
	if (x<=mid) tree[p].ls=insert(tree[now].ls,l,mid,x,val);
		else tree[p].rs=insert(tree[now].rs,mid+1,r,x,val);
	tree[p].min=min(tree[tree[p].ls].min,tree[tree[p].rs].min);
	return p;
}

int ask(int x,int l,int r,int val)
{
	if (l==r) return r;  //找到答案
	int mid=(l+r)/2;
	if (tree[tree[x].ls].min>=val) return ask(tree[x].rs,mid+1,r,val);
		else return ask(tree[x].ls,l,mid,val); 
}

int main()
{
	scanf("%d%d",&n,&T);
	root[0]=build(0,n);
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		if (x<=n) root[i]=insert(root[i-1],0,n,x,i);  //插入
			else root[i]=insert(root[i-1],0,n,n+1,i);
	}
	while (T--)
	{
		scanf("%d%d",&x,&y);
		printf("%d\n",ask(root[y],0,n,x)); 
	}
	return 0;
}
5G MBS(组播广播服务)深度解析:从标准架构到商用实践 阅读详情

相关推荐

智驾域控制器硬件架构:从接口丛林到算力核心的工程解码

本文深入解析了智驾域控制器硬件架构的设计挑战与工程实践。面对复杂的接口丛林,文章详细探讨了如何高效融合摄像头、雷达等多源传感器数据,并构建以多SOC为核心的强大算力平台。同时,文章强调了电源、时钟、散热等最小系统及车规级可靠性设计的关键作用,为工程师提供了从接口驯服到算力核心协同的完整硬件解码指南。

happy2的博客 481

mex(主席树)

mex题意数据范围思路代码 题意 有一个长度为nnn的数组{a1,a2,…,an}\{a_1,a_2,\dots, a_n\}{a1​,a2​,…,an​}。mmm次询问,每次询问一个区间内最小没有出现过的自然数。 数据范围 1≤n,m≤2×1051 \leq n, m \leq 2 \times 10^51≤n,m≤2×105 0≤ai≤1090 \leq a_i \leq 10^90≤ai​≤109 思路 很经典的一道应用主席树的题目。每个区间记录这个去年所有数最近出现位置的最小值,如果说某个数小于等于

心升明月的博客 523

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1773

线段树-Mex-洛谷P4137

Mex 问题提出 有一个长度为nnn的数组{a1,a2,…,an}\{a_1,a_2,…,a_n\}{a1​,a2​,…,an​}。mmm次询问,每次询问一个区间内最小没有出现过的自然数。 题目解答 对1−n1-n1−n这里能够的每个数xxx,都统计出来在数组中出现的位置,并在前补上000,在后补上n+1n+1n+1. 例如数组{1,2,3,2,1}\{1,2,3,2,1\}{1,2,3,2,1}...

SUNSET 338

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口)

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) 之前写了一篇关于C++调用海康相机SDK采集图像的文章,有很多人私下发送消息咨询了一些问题,由于工作繁忙,只答复了一部分问题,今天抽出时间从头梳理了一下大家提出的问题,把我能够回答的问题都解答一次。上一次的程序只是简单的实现了图像的采集,没有使用到线程,今天把程序重新做出调整,把线程和多态加进去。文章最后有项目的下载地址。 我使用的是QT Creator这个IDE,版本信息如下: 我把相机采集的图像转换为openC

大樱桃的博客 1万+

点云处理工具——pclpy安装

pclpy介绍及详细安装过程 文章目录pclpy简介下载:安装测试 pclpy简介 pclpy是点云库(PCL)的Python绑定。使用CppHeaderParser和pybind11从头文件生成。 这个库正在积极开发中,api可能会发生变化。所包含的模块确实可以工作,但测试还不完整。目前只支持Windows和python 3.6 x64。 许多其他python库尝试绑定PCL。最流行的是python-pcl,它使用Cython。虽然Cython非常强大,但绑定c++模板并不是它的强项(PCL大量使用模.

图像处理、SLAM、PCL、OpenCV爱好者 1万+

洛谷 P4137 Rmq Problem / mex 可持久化线段树 / 莫队

https://www.luogu.com.cn/problem/P4137 解法1:可持久化线段树 因为需要查询区间内未出现过的自然数,维护的是数是否有出现,所以大概要往权值线段树那个方向靠 用tre[i]表示树节点 root[i]表示每一棵树的树根 对于第i颗树,其树上的叶子节点表示 : 数组的第1~第i个数中,叶子节点所代表的那个数x出现的最靠右的距离 其余节点则维护节...

forOnward的博客 515

Qt项目开发实例 (含源码)

qt教程、qt项目、qt下载、qt项目实战、qt多线程。本文通过分析demo源码,QT实战的方式进行学习,学习路线是以实战为目录,全面的使用自己的学习知识,文章中编写一系列的学习游戏demo,与大家一起分享。

啊渊的专栏 14万+

区间mex -- 主席树

题目link 思路 如何求 mex ? 我们可以在一棵权值线段树(类似桶)上维护 aia_iai​,最近一次出现的位置的编号插入到权值线段树中,那么从左到右遍历一下权值线段树(桶)第一个没被插的值就是 ans 如何查询区间 ? 考虑 查询区间 [l,r][l,r][l,r] 的 mexmexmex 为了避免值相同的aia_iai​,对权值线段树维护值的影响 我们需要利用主席树来维护插入不同值时的情况 只需查询第 yyy 棵树,找到第一个小于 lll 的权值 如何找到第一个小于 lll 的权值 ? 通过维护

nttttt の blog 937

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 369

【置顶】TEE从入门到精通-[目录]

此专栏讲解包含不限于optee、商用TEE、常规的安全业务设计。但主要基于optee最新代码,深度讲解和剖析各项原理和机制...

baron-周贺贺-代码改变世界ctw 6422

P4137 Rmq Problem / mex 主席树求mex

传送门 文章目录题意:思路: 题意: 思路: 主席树维护每个位置出现的最后位置,当查询[l,r][l,r][l,r]的时候,我们只需要在[1,r][1,r][1,r]中找最后出现位置<l<l<l的位置即可,也就是在主席树的第rrr棵树找值<l<l<l的位置的最小值,直接在上面二分就好啦。 注意因为要求mexmexmex,还要把0,a[i]+10,a[i]+10,a[i]+1都插入。 //#pragma GCC optimize(2) #include<cstdio

m0_51068403的博客 260

30分钟上手YOLO26 nano:INT8量化部署到智能相机,推理速度提升43%

微调代码(仅需5行,数据集遵循COCO格式)data="custom_data.yaml", # 数据集配置文件epochs=20, # 少量轮数即可收敛batch=8,imgsz=640model.save("yolov26n_custom.pt") # 保存微调后的模型本文在30分钟内完成了YOLO26 nano的INT8量化与智能相机部署,核心步骤为环境准备→模型获取→ONNX导出→INT8量化→部署推理。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 987

洛谷P4137 Rmq Problem / mex(区间mex/主席树)

题目 有一个长度为n(n<=2e5)的数组(0<=ai<=1e9)。 m(m<=2e5)次询问,第i次询问给出一个区间(li,ri), 询问该区间内,没有出现过的最小自然数。 思路来源 https://www.luogu.com.cn/problem/solution/P4137 题解 首先,第i棵树维护的是只考虑[1,i]的值时,值域的最右位置,贪心 注意到答案只可能在[0,n]中,故直接忽略>n的ai值,令root[i]继承root[i-1], 否则...

小衣同学的博客 687

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【洛谷 P4137】 Rmq Problem / mex(主席树)

题目链接 容易发现,可能答案只有\(0\)、每个数,每个数\(+1\) 于是把这\(2n+1\)个数建立一个权值线段树,可持久化一下,每个节点记录这个子树中最后加入数加入的时间的最小值\(latest\)(好好理解一下)。 对于查询\((l,r)\),线段树上二分找到最小的\(latest<l\)的叶节点,那么答案就是这个节点代表的数。 #include <cstdio> #in...

weixin_34110749的博客 210

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷 P4137 Rmq Problem / mex(主席树)

const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; int minn; void update(int x){ sz++; minn=x; } }t[N<<5]; int root[N],tot=0; void push_up(int id) { ...

C_Dreamy的博客 450

luogu P4137 Rmq Problem / mex 主席树 + 思维

Code: #include<bits/stdc++.h> #define maxn 200001 using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } namespace tr { #define mid (...

EM LGH 192

洛谷4137 mex题解 主席树

题目链接 虽然可以用离线算法水过去,但如果强制在线不就gg了。 所以要用在线算法。 首先,所有大于n的数其实可以忽略,因为mex的值不可能大于n 我们来设想一下,假设已经求出了从0到n中所有数在原序列中小于r时最后出现的位置,用k[i]来表示 那么显然mex(l,r)就是小于l的最小的k[j]中最小的下标,显然可以维护一下最小值,用二分来求。 然后建一颗主席数,root[i]...

weixin_30520015的博客 246

【JZOJ5710】【北大夏令营2018模拟5.13】Mex(主席树)

Problem   给定长度为 n 的序列 a。现有 m 次询问,每次给定 l 和 r,询问区间 [l,r] 的数构成的集合的 mex 值。给定数据类型t,当t=1时强制在线。 Hint Solution 算法Ⅰ:线段树   70points的数据允许离线,所以我们故意想一想离线。   我们可以将询问按左端点排序,然后依次枚举每个位置作为左端点,预处理出每个位置作为右端点的me...

qq_36551189的博客 499

[洛谷P4137]Rmq Problem / mex

不错的莫队题目(悄悄说一句,不一定非要莫队哦)

七代目鸽影 416

主席树(mex)

添加链接描述 #include<bits/stdc++.h> using namespace std; int n,m,t; const int maxn=2e5+5; struct st{ int l,r,mi; }tre[maxn<<5]; int tot,ver[maxn]; void pushup(int root){ st &rt=tre[root]; st &l1=tre[rt.l ]; st &r1=tre[rt.r ]; rt.mi

mozelyr的博客 177

bzoj3585 mex

3585: mex Time Limit:20 SecMemory Limit:128 MBSubmit:1445Solved:725[Submit][Status][Discuss] Description   有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。 Input   第一行n,...

weixin_30947043的博客 77

【luogu P4137 Rmq Problem / mex】 题解

题目链接:https://www.luogu.org/problemnew/show/P4137 求区间内最大没出现过的自然数 在add时要先判断会不会对当前答案产生影响,如果有就去找下一个答案。 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4...

163

【LOJP4137】Rmq Problem / mex 主席树求区间MEX

传送⻔ 题意 分析 我们用主席树维护每一个数最后一次出现的位置,然后每次查询就在第rrr棵树上求最小的,位置小于lll的数 代码 #include <bits/stdc++.h> #define debug(x) cout<<#x<<":"<<x<<endl; #define dl(x) printf("%lld\n",x); #define di(x) printf("%d\n",x); #define _CRT_SECURE_NO_WARNI

tlyzxc的博客 204

[BZOJ3585][清华集训2014]mex 主席树

考虑用主席树维护到第i个位置时,每个数最后一次出现位置,也就是说维护的是n棵权值线段树,线段树上每个节点表示值域在此之内的每个数最后一次出现位置的最小值。 那么一个询问(l,r)就是在第r棵线段树上查最小的且上一次出现位置小于l的数,经典操作。 注意离散化的时候要把每个值和它+1扔进去离散化,而且要去重,因为不能破坏整数的连续性。 代码:#include<iostream> #include<

DOFYPXY的博客 527

【LuoguP4137】区间mex-主席树

测试地址:区间mex 做法:本题需要用到主席树。 看到本题是离线的,很多同学想到了很显然的莫队做法,或者一些奇奇怪怪的离线做法,但实际上在线做法是有的:主席树。 考虑转换条件,我们要求最小的在一个区间中没出现过的自然数,如果把原数列看做往一个空序列中一个一个插入元素,那实际上我们找的就是在某段时间内没有被插入过的最小的元素。考虑按照权值建线段树,对于每个线段树中的区间,我们存储这个区间中最久...

Maxwei_wzj的OI世界 1077

牛客 - 牛牛的mex(主席树/思维)

题目链接:点击查看 题目大意:给出一个长度为 n 的排列,再给出 m 次询问,每次询问需要回答区间 [ l , r ] 的 mex 题目分析:算是一道比较经典的题目了吧,先说一般做法,一般做法是 nlogn 的主席树,或者离线线段树,或者是 nsqrt( n ) 的莫队,这里我选择了比较好理解的主席树存一下,主席树的话就是每一个版本的线段树储存一下 [ 1 , i ] 中每个数字最后一次出现的位置,这样每次查询 [ l , r ] ,只需要在第 r 个版本的线段树中查询最小的那个没有出现的数字即可 而

Falcon的博客 767
上一篇: 【洛谷P4168】蒲公英【分块】
下一篇: 【洛谷P3216】【BZOJ2326】数学作业【矩阵乘法】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值