单调栈+倍增思想 皇家守卫【算法赛】、单调队列 附近最小
皇家守卫【算法赛】问题描述在蓝桥王国的边疆有 NN​ 座高塔每座高塔上均有一个士兵他们被称之为皇家守卫。每座高塔均有一个高度第 ii 座高塔的高度为 hihi​。对于第 ii 座塔若其右边存在某座塔 jj满足max⁡(hi,hi1,hi2,⋯,hj−1)hjmax(hi​,hi1​,hi2​,⋯,hj−1​)hj​则称第 jj 座塔为第 ii 座塔 暸望塔。现在王国传来 QQ 个任务每个任务会给定两个编号 x,yx,y需要你求解第 xx 座高塔和 第 yy 座高塔的公共 暸望塔 数量。x,yx,y 的公共 暸望塔 定义为两者同时拥有的 暸望塔。输入格式第一行输入两个整数 N,Q(1≤N,Q≤105)N,Q(1≤N,Q≤105) 表示高塔个数和任务数。第二行输入 NN 个整数 h1,h2,h3,⋯,hn(1≤hi≤109)h1​,h2​,h3​,⋯,hn​(1≤hi​≤109) 表示高塔的高度。接下来 QQ 行每行输入两个整数 x,y(1≤x≤y≤N)x,y(1≤x≤y≤N) 表示一次任务询问。输出格式输出 QQ 行每行一个整数表示答案输入样例5 3 1 3 4 5 7 1 3 2 4 3 5输出样例2 1 0说明对于第一个询问第 11 座高塔和第 33 座高塔的公共暸望塔有 4,54,5 号塔。import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.*; public class Main { static int N100010; static int a[]new int[N]; static int next[]new int[N];//表示右边第一个比我高的高塔的索引 static int len[]new int[N];//表示 右边严格大于我的高塔的数量 static int log2[]new int[N]; static int go[][]; static int n; static BufferedReader br new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bwnew BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws IOException { StringTokenizer stnew StringTokenizer(br.readLine()); nInteger.parseInt(st.nextToken()); int qInteger.parseInt(st.nextToken()); stnew StringTokenizer(br.readLine()); for (int i 1; i n; i) { a[i]Integer.parseInt(st.nextToken()); } a[n1]Integer.MAX_VALUE; findMax(n); for (int i n-1; i 0 ; i--) {//从后往前遍历 if(next[i]!n1)len[i]len[next[i]]1;//要加判断语句 } log2[1]0; for (int i 2; i N; i) { log2[i]log2[i1]1; } gonew int[n2][log2[n]1];//go(i,j)表示从i出发跳2^j步得到的下标 for (int j 0; j log2[n]; j) { for (int i 1; i n; i) { if(j0)go[i][j]next[i]; else { go[i][j]go[go[i][j-1]][j-1]; } } } for (int i 0; i q; i) { stnew StringTokenizer(br.readLine()); int xInteger.parseInt(st.nextToken()),yInteger.parseInt(st.nextToken()); //题目可以理解为求x位置的瞭望塔中索引大于y塔的数量 是x的瞭望塔一定是y的 //我们可以利用倍增思想去遍历塔 int nxx; for (int k log2[n]; k 0; k--) {//这里一定要从最大步长不断递减 //当前位置能跳的最大幅度再微调能走到极限 //先挪一小步把原本能跳的大步机会直接废掉走不到最远 int nxtgo[nx][k]; if(nxty nxt!0){ nxnxt; } } bw.write(len[nx]\n); } br.close(); bw.flush(); bw.close(); } static void findMax(int n){//维护next for (int i 1; i n; i) { next[i]n1; } StackInteger stacknew Stack();//维护一个单调递减栈 for (int i n; i 1; i--) { int ua[i]; while(!stack.isEmpty() a[stack.peek()]u)stack.pop(); if(!stack.isEmpty())next[i]stack.peek(); stack.add(i); } } }附近最小问题描述小蓝有一个序列 a[1],a[2],...,a[n]a[1],a[2],...,a[n]。给定一个正整数 kk请问对于每一个 11 到 nn 之间的序号 iia[i−k],a[i−k1],...,a[ik]a[i−k],a[i−k1],...,a[ik] 这 2k12k1 个数中的最小值是多少当某个下标超过 11 到 nn 的范围时数不存在求最小值时只取存在的那些值。输入格式输入的第一行包含一整数 nn。第二行包含 nn 个整数分别表示 a[1],a[2],...,a[n]a[1],a[2],...,a[n]。第三行包含一个整数 kk 。输出格式输出一行包含 nn 个整数分别表示对于每个序号求得的最小值。样例输入5 5 2 7 4 3 1样例输出2 2 2 3 3评测用例规模与约定对于 30% 的评测用例1n10001a[i]10001n10001a[i]1000。对于 50% 的评测用例1n100001a[i]100001n100001a[i]10000。对于所有评测用例1n10000001a[i]10000001n10000001a[i]1000000。法1添加数据import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.*; public class Main { static int N1000010; static int a[]new int[N]; static int c[]new int[2*N]; static int res[]new int[2*N];//表示右边第一个比我高的高塔的索引 static int n; static BufferedReader br new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bwnew BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws IOException { StringTokenizer stnew StringTokenizer(br.readLine()); nInteger.parseInt(st.nextToken()); stnew StringTokenizer(br.readLine()); for (int i 1; i n; i) { a[i]Integer.parseInt(st.nextToken()); } stnew StringTokenizer(br.readLine()); int kInteger.parseInt(st.nextToken()); int ii 1; for (; ii k; ii) { c[ii]Integer.MAX_VALUE; } for (int j1; jn; ii,j) { c[ii]a[j]; } for (int j1; j k; j,ii) { c[ii]Integer.MAX_VALUE; } for (int i 1; i ii; i) { res[i]Integer.MAX_VALUE; } DequeInteger dequenew LinkedListInteger();//维护一个单调递增的队列 for (int i 1; i ii; i) { int uc[i]; //清除过期数据 while(!deque.isEmpty() i-deque.getFirst()2*k1)deque.pollFirst(); //维护队列 while(!deque.isEmpty() c[deque.peekLast()]u)deque.pollLast(); deque.add(i); res[i]deque.peek(); } for (int i 2*k1,j1; jn; j,i) {//注意开始下标 bw.write(c[res[i]] ); } br.close(); bw.flush(); bw.close(); } }法2枚举中心点import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.*; public class Main { static int N1000010; static int a[]new int[N]; static int res[]new int[N];//表示右边第一个比我高的高塔的索引 static int n; static BufferedReader br new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bwnew BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws IOException { StringTokenizer stnew StringTokenizer(br.readLine()); nInteger.parseInt(st.nextToken()); stnew StringTokenizer(br.readLine()); for (int i 1; i n; i) { a[i]Integer.parseInt(st.nextToken()); } stnew StringTokenizer(br.readLine()); int kInteger.parseInt(st.nextToken()); DequeInteger dequenew LinkedListInteger();//维护一个单调递增的队列 int right0;//当前已经处理过的右边界 for (int i 1; i n; i) {//枚举每个中心点 int lMath.max(1, i-k),rMath.min(n, ik);//保证合法索引 //清除过期数据 if(!deque.isEmpty() deque.getFirst()l)deque.pollFirst();//每次左移一个单位 不用写成循环 //把属于l到r范围的数据添加进去 while(rightr){ right; while(!deque.isEmpty() a[deque.peekLast()]a[right])deque.pollLast(); deque.add(right); } res[i]deque.peekFirst(); } for (int i 1; i n; i) { bw.write(a[res[i]] ); } br.close(); bw.flush(); bw.close(); } }

相关新闻

工业级高精度ADC与STM32信号采集系统设计

工业级高精度ADC与STM32信号采集系统设计

1. 高精度信号采集系统概述在工业控制、医疗设备和测试测量等领域,模拟信号到数字信号的可靠转换是系统设计的核心挑战之一。我最近在一个工业传感器项目中采用了TI的TLA2518 ADC与STMicroelectronics的STM32F302VC微控制器的组合方案,这套组合在12位精度…

2026/7/11 8:29:45 阅读更多 →
Bebas Neue字体完全指南:如何用这款免费开源字体提升你的设计质感

Bebas Neue字体完全指南:如何用这款免费开源字体提升你的设计质感

Bebas Neue字体完全指南:如何用这款免费开源字体提升你的设计质感 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 寻找一款既专业又完全免费的开源字体来提升你的设计项目?Bebas Neue字体…

2026/7/11 8:27:44 阅读更多 →
Claude模型J空间:AI内部推理机制与安全应用解析

Claude模型J空间:AI内部推理机制与安全应用解析

在AI模型开发领域,最近Anthropic发布的研究成果引起了广泛关注——研究人员发现Claude模型内部存在一个被称为"J空间"的特殊工作机制。这个发现不仅对理解大型语言模型的内部工作原理具有重要意义,更为AI安全研究提供了新的视角。本文将深入解…

2026/7/11 8:25:43 阅读更多 →

最新新闻

华为全家桶到底值不值,对比其他品牌看生态优势在哪

华为全家桶到底值不值,对比其他品牌看生态优势在哪

鸿蒙生态的“无缝”体验:从剪贴板共享说起 对于很多正在纠结换手机还是买电脑的家庭用户来说,单看硬件参数往往容易陷入“跑分焦虑”。实际上,当你真正踏入华为的“全家桶”阵营,最先感知到的并非芯片的绝对算力,而是那…

2026/7/11 9:13:58 阅读更多 →
4款主流2D激光SLAM算法对比:Cartographer/Gmapping/Hector/Karto 实测性能与适用场景

4款主流2D激光SLAM算法对比:Cartographer/Gmapping/Hector/Karto 实测性能与适用场景

4款主流2D激光SLAM算法实测对比:工程选型指南与性能优化策略 在机器人自主导航领域,选择合适的2D激光SLAM算法往往决定着整个项目的成败。面对Cartographer、Gmapping、Hector和Karto这四款主流开源方案,工程师们常常陷入选择困境——每款算法…

2026/7/11 9:13:58 阅读更多 →
LinkLifeVerse OS 理论体系

LinkLifeVerse OS 理论体系

——构建消费可信数据价值空间,开启消费数字经济的新范式摘要人工智能、大模型、数据要素和可信数据空间的发展,正在推动数字经济进入新的发展阶段。数字经济竞争的核心,正从流量竞争、平台竞争,逐步演进为数据竞争、AI竞争与价值…

2026/7/11 9:11:57 阅读更多 →
55. OrCAD绘制原理图时怎么拖动与旋转元器件?I Cadence Allegro 电子设计 快问快答

55. OrCAD绘制原理图时怎么拖动与旋转元器件?I Cadence Allegro 电子设计 快问快答

大家好。在OrCAD原理图设计过程中,器件的拖动与旋转是最频繁的基础操作之一。无论是调整布局以便于连线,还是将器件从一处移动到另一处,掌握正确的操作方法都能显著提升绘图效率。特别需要注意的是,按住【Alt】键拖动与直接拖动有…

2026/7/11 9:09:57 阅读更多 →
Claude Fable 5 实战指南:8个必跑Prompt模式与工程化部署

Claude Fable 5 实战指南:8个必跑Prompt模式与工程化部署

在实际 AI 应用开发中,模型升级往往意味着整个工程范式的转变。Claude Fable 5 作为 Anthropic 最新推出的旗舰模型,不仅在能力上超越了之前的 Opus 系列,更在交互方式上带来了根本性的变化。许多开发者习惯将精心调校的 Opus Prompt 直接迁移…

2026/7/11 9:05:54 阅读更多 →
好消息,新用户福利来啦,千问新用户福利怎么领取8元优惠券?附最新口令:千问新用户专属853226

好消息,新用户福利来啦,千问新用户福利怎么领取8元优惠券?附最新口令:千问新用户专属853226

最新领取教程1. 下载千问APP,完成首次注册并登录,仅限新用户参与2. 账号绑定支付宝,用于优惠券领取及后续消费抵扣领券操作步骤1. 进入千问APP聊天界面,复制发送最新有效专属口令:2. 千问新用户专属853226要是上面的口…

2026/7/11 9:01:53 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻