【ybt】【数据结构 RMQ 课过 例3】与众不同

【ST表】【RMQ问题】与众不同 「完美序列」:一段连续的序列满足序列中的数互不相同。 A 想知道区间L,R之间最长的完美序列长度。 阅读详情

与众不同

题目链接:YbtOJ


在这里插入图片描述

解题思路

设 l a s t i last_i lasti​ 表示 i i i 上一次出现的位置。
设 p r e i pre_i prei​ 表示以 i i i 结尾的最长完美序列的启示位置,显然 p r e i = max ⁡ ( p r e i − 1 , l a s t a i ) pre_i=\max(pre_{i-1},last_{a_i}) prei​=max(prei−1​,lastai​​) 。
我们先处理出 l a s t last last 和 p r e pre pre ,然后二分出一个 l e n len len, l e n len len 的左边可以直接求出答案, l e n len len 的右边则可以用 s t st st 表求出,取最大值即可。

code

#include<iostream>
#include<cstdio>
#include<cmath>
#define IN 1000001
using namespace std;

int n,m;
int a[200010]; 
int pre[200010];
int last[2000010];
int st[200010][20];

int fd(int x,int y)
{
	int l=x,r=y,s=x;
	while(l<=r)
	{
		int mid=(l+r)/2;
		if(pre[mid]<x)
			l=mid+1,s=mid;
		else
			r=mid-1;
	}
	return s;
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	pre[1]=last[a[1]+IN]=st[1][0]=1;
	for(int i=2;i<=n;i++)
	{
		pre[i]=max(pre[i-1],last[a[i]+IN]+1);
		st[i][0]=i-pre[i]+1;
		last[a[i]+IN]=i;
	}
	for(int j=1;j<=log2(n);j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
	while(m--)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		x++,y++;
		int len=fd(x,y);
		int ans=len-x+1;
		int k=log2(y-len);
		if(len<y)
			ans=max(ans,max(st[len+1][k],st[y-(1<<k)+1][k]));
		cout<<ans<<endl;
	}
}
[NOIP2011真题]选择客栈 题目背景 NOIP2011提高组 DAY1 试题。题目描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号。每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一 阅读详情

相关推荐

1543:【例 3】与众不同-2019.12.09.pdf

1543:【例 3】与众不同-2019.12.09

1543:与众不同(RMQ+二分细节处理

#include <bits/stdc++.h> using namespace std; const int logn = 21; const int N = 2e5+10; int f[N][logn + 1], Logn[N + 1]; int n,m,st[N],a[N];map<int,int> pr; void pre() { Logn[1]=0;Logn[2]=1; for(int i=3;i<N;i++) Logn[i]=Logn[i/2]+1;

我们仍未知道那天所看见的花的名字。 707

小红书爬取实战指南

以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。

monk all the way 6926

快乐地打牢基础(3)——RMQ问题

RMQ问题是Range Maximum(Minimum) Query的缩写,就是查询某个区间的最大最小值,可以使用线段树,ST表,笛卡尔树上求LCA等多种方法求。ST表由于之前已经写过了博客,所以直接上题。 一本通 OJ:http://ybt.ssoier.cn:8088/ 【例题1】 1541 数列区间最大值 题意: 输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出...

Miserable_ccf的博客 595

嵌入式GUI显示驱动配置实战:从emWin硬件接口到SPI屏驱动优化

在嵌入式系统开发中,显示驱动是连接GUI库与物理屏幕的核心底层模块,其本质是CPU与显示控制器之间的数据“翻译”与“传输”系统。其工作原理是通过实现特定的硬件抽象层接口,将GUI生成的图形数据转换为屏幕能识别的时序和协议。这项技术的核心价值在于,它允许开发者在资源受限的MCU上,通过适配不同的硬件接口,以最小的硬件开销实现稳定的图形输出。其典型应用场景包括智能家居面板、工业HMI、可穿戴设备等嵌入式图形界面开发。本文将深入解析emWin GUI库的驱动框架,重点探讨如何针对SPI、I2C等串行接口进行高效的

weixin_29159711的博客 342

Android 关于佳博和汉印蓝牙热敏打印机开发,Android程序员必经的实践之路

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84149570的博客 1022

YBTOJ C. 【例题3】与众不同

思路:首先应该想到dp,我们约定pre[i] 为i号位为结尾的数的起始位置,f[i]为i号位为结尾的最长序列长度,不难得到 pre[i]=max(pre[i-1],last[a[i]]+1) f[i]=i-pre[i]+1。因为上面的式子可以得到pre[i] 为一个单调不降序列,于是我们可以用二分来寻找分界点,那么第二种序列长度就为pos-l+1,下面就是处理第一种答案了,这里运用。对于一个访问区间有两种序列长度:1.整个序列被包含在区间内 2.整个序列被不完全包含在区间内。算法来加速区间最大值查询。

DL24yanjun的博客 398

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2172

信息学奥赛一本通 1543:【例 3】与众不同

题目摘要: 本题要求处理整数序列,查询区间内最长不重复子段的长度(完美序列)。通过预处理每个元素结尾的最长不重复子段起始位置(st数组)和长度(len数组),利用ST表或线段树快速查询区间最大值。关键点包括:处理负数下标(数值偏移或离散化),二分查找确定分界点p,比较两部分结果(重叠子段长度与右侧区间最大值)。解法1使用ST表实现O(1)查询,解法2采用线段树。最终输出查询区间内的最优解,时间复杂度为O(nlogn + mlogn)。

君义NOIP的博客 1431

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2869

109. 使用 SAP UI5 FileUploader 控件上传本地文件

我们可以使用SAPUI5提供的控件,将本地文件上传到远端服务器进行存储。远端服务器负责接收上传的文件的逻辑,可以采取Java,Node.js或者ABAP等任意的编程语言实现。本地文件上传也是最终用户同文件服务器交互的重要手段之一,因此文件上传这个主题,本教程会通过若干篇文章连续进行介绍。笔者还另外实现了一个不通过SAPUI5FileUploader控件,而是直接用HTML原生的input。先看本步骤完成后实现的场景。本步骤完整的源代码位置。进入目录109,运行命令行。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2236

【Ybt OJ】[数据结构 第3章] RMQ问题 (ST表) [前半章]

「「「数据结构」」」第333章 RMQRMQRMQ问题(((前222题))) 目录: A.数列区间 B.静态区间 A.A.A. 例题111 数列区间 洛谷linklinklink 分析: ststst表 一般用于解决这种RMQRMQRMQ问题(((区间最值))) 之前写的讲的不是很清楚linklinklink ststst表是倍增的思想 如果fi,jf_{i,j}fi,j​ 表示从iii位置开始2j2^j2j个数的最大值 如fi,3f_{i,3}fi,3​ 就是指fif_ifi​ fi+1f_{i+1}

绫 172

第20期-英伟达笔试题型解析

英伟达作为AI领域的缔造者及硬件基石,是这几年最为炙手可热的公司。英伟达以其高性能GPU设计闻名,硬件工程师岗位的招聘通常包括笔试和技术面试,考察领域涵盖数字电路设计、处理器架构、嵌入式系统和信号处理等。通过搜索公开平台,收集了候选人的面试经历和相关技术问题,,通过分析公开平台收集的笔试面试经验,结合英伟达的GPU架构特点,整理出可能涉及的典型题目,并提供详细解析。 以下是基于英伟达(Nvidia)硬件工程师笔试题型的解析与总结,涵盖核心知识点、解题思路及案例分析。

启芯硬件的博客 746

【Ybt OJ】[数据结构 第3章] RMQ问题 (ST表) [后半章]

「「「数据结构」」」第333章 RMQRMQRMQ问题(((后222题))) 目录: C.与众不同 D.矩阵最值 C.C.C. 例题333 与众不同 分析: headihead_iheadi​表示以iii结尾完美序列 的起点 lenilen_ileni​表示以iii结尾最长完美序列 的长度 locxloc_xlocx​表示最近的xxx出现的位置 注意 ∣ai∣<=106|a_i|<=10^6∣ai​∣<=106的 那你就要处理负数 把下标加上10610^6106 然后二分起点 再sts

绫 205

STM32CubeMX之DAC产成正弦波

“在之前的文章中曾经介绍过用TIM产生PWM做DAC用,STM32定时器输出PWM做DAC。部分型号的STM32单片机内部有专用的DAC,本篇文章将介绍如何用内部DAC+DMA产生正弦波...

zhang062061的专栏 1513

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

YbtOJ RMQ问题课堂过关 例3 与众不同【ST表】【DP】

思路 这道题我们首先设 lastilast_ilasti​ 表示盈利值为 iii 上一次出现的位置, 然后设 pip_ipi​ 表示以 iii 为结尾的最长完美序列的起始位置,用last DP求出p后,能得到答案为 i−pi+1i-p_i+1i−pi​+1. 这时候对于一个区间 [l,r][l,r][l,r] ,我们设一个now ,now左边 pi<lp_i<lpi​<l ,可直接求出答案,now右边则可以用st表求出 [now+1,r][now+1,r][now+1,r] 的最大值,..

JA_yichao欢迎你 cnblogs账号:https://www.cnblogs.com/mayichao/ 246

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【ybt高效进阶4-3-1】【luogu P3865】数列区间 / 【模板】ST表

给你一个数列,多次询问,每次问一个区间中的最大值。

欢迎您的光顾awa 216

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【算法•日更•第十八期】信息奥赛一本通1600:【例 4】旅行问题题解

  废话不多说,直接上题: 1600:【例 4】旅行问题 时间限制: 1000 ms 内存限制: 524288 KB提交数: 96 通过数: 36 【题目描述】 原题来自:POI 2004 John 打算驾驶一辆汽车周游一个环形公路。公路上总共有n车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。John 必...

weixin_30853329的博客 402

CSU训练分类

√√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 1.1 例 3」喷水装置 √√#10003 「一本通 1.1 例 4」加工生产调度 √√#10004 「一本通 1.1 例 5」智力大冲浪 √√#10005 「一本通 1.1 练习 1」数列极差 √...

weixin_30314631的博客 1697

《ybtoj高效进阶》第四部分第三章例题3 与众不同

题目大意 求某个给定序列a中l到r中最长的连续子序列,要求选择序列中不能有重复数字。同一序列,多个询问 思路 显然,设pip_ipi​为以i结尾的最长序列起始点,显然有pi=max(pi−1,lastai+1)(1<=i<=n)p_i=max(p_{i-1},last_{a_i}+1)(1<=i<=n)pi​=max(pi−1​,lastai​​+1)(1<=i<=n),其中lastlastlast表示某个数上一次出现的位置,我们有ppp不下降。 再设fif_ifi​为i

SSL_WCR 380

【唐氏题目 nt题】与众不同

与众不同## 题目描述A是某公司的CEO,每个月都会有员工把公司的盈利数据送给A,A是个与众不同的怪人,A不注重盈利还是亏本,而是喜欢研究「完美序列」:一段连续的序列满足序列中的数互不相同。A想知道区间[L,R]之间最长的完美序列长度。## 输入格式第一行两个整数N,M,N表示连续N个月,编号为0到N−1,M表示询问的次数;第二行N个整数,第i个数表示该公司第i个月的盈利值ai;接下来M行每行两个整数L,R,表示A询问的区间。## 输出格式。

2301_77025310的博客 754

一本通1543与众不同

1543:【例 3】与众不同 时间限制: 1000 ms 内存限制: 524288 KB 题目描述 A 是某公司的 CEO,每个月都会有员工把公司的盈利数据送给 A,A 是个与众不同的怪人,A 不注重盈利还是亏本,而是喜欢研究「完美序列」:一段连续的序列满足序列中的数互不相同。 A 想知道区间[L,R]之间最长的完美序列长度。 ...

weixin_30408739的博客 1126

「一本通 4.2 例 3」与众不同 (loj10121)

题目描述 A 是某公司的 CEO,每个月都会有员工把公司的盈利数据送给 A,A 是个与众不同的怪人,A 不注重盈利还是亏本,而是喜欢研究「完美序列」:一段连续的序列满足序列中的数互不相同。 A 想知道区间 [L,R][ 之间最长的完美序列长度。 输入格式 第一行两个整数 N,M,N 表示连续 N 个月,编号为 0 到 N−1,M 表...

weixin_30466421的博客 614

LOJ #10121. 「一本通 4.2 例 3」与众不同

题目描述 A 是某公司的 CEO,每个月都会有员工把公司的盈利数据送给 A,A 是个与众不同的怪人,A 不注重盈利还是亏本,而是喜欢研究「完美序列」:一段连续的序列满足序列中的数互不相同。 A 想知道区间 [L,R][L,R][L,R] 之间最长的完美序列长度。 输入格式 第一行两个整数 N,MN,MN,M,NNN 表示连续 NNN 个月,编号为 000 到 N−1N-1N−1,MMM 表...

YYHS_WSF的博客 2194

#10121. 「一本通 4.2 例 3」与众不同(ST算法预处理+二分询问时间)

https://loj.ac/problem/10121 思路: 转载于:https://www.cnblogs.com/songjian-jiansong/p/10320538.html

aq77210的博客 553

「一本通 4.2 例 3」与众不同

链接 这道题预处理有点烦 因为查询的时候分两块 一个st表 一个贪心直接加减 二分找中间值 #include<bits/stdc++.h> #define re return #define ll long long #define inc(i,l,r) for(int i=l;i<=r;++i) using namespace std; ...

weixin_30660027的博客 482
上一篇: 【ybt】【数据结构 RMQ 课过 例2】静态区间
下一篇: 【ybt】【数据结构 RMQ 课过 例4】矩阵最值
SSL_GYX
博客等级 码龄7年 103粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值