news 2026/7/11 23:23:35

单调栈-四元组问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单调栈-四元组问题

四元组问题

问题描述

从小学开始,小明就是一个非常喜欢数学的孩子。他喜欢用数学的方式解决各种问题。在他的高中时期,他遇到了一个非常有趣的问题,那就是给定一个长度为 nn 的整数数组 numsnums ,判断是否存在四个不同的下标 a,b,c,da,b,c,d ,使得 aa < bb < cc < dd ,并且 nums[d]nums[d] < nums[c]nums[c] < nums[a]nums[a] < nums[b]nums[b] 。

小明非常喜欢这个问题,他决定用数学的方式来解决它。他首先想到了一个非常简单的方法,那就是暴力枚举。他用四个循环来枚举所有可能的下标组合,然后判断是否满足条件。但是这个方法非常耗时,当 nn 很大时,计算量会非常大。

所以请求你给出一个快速智慧的解决办法。

输入格式

输入仅两行,第一行包含一个整数 nn ,第二行包含 nn 个整数,其含义如上所述。

输出格式

输出仅一行,包含一个字符串,YES表示题目存在上面所描述的情况,否则输出NO

样例输入

4 3 4 2 1

样例输出

YES

说明

在样例中,当 a,b,c,da,b,c,d 分别等于 0,1,2,30,1,2,3 满足 aa < bb < cc < dd ,并且使得 nums[d]nums[d] < nums[c]nums[c] < nums[a]nums[a] < nums[b]nums[b] 。

评测数据规模

对于 5050% 的评测数据, 4≤n≤200,−200≤nums[i]≤2004≤n≤200,−200≤nums[i]≤200 。

对于 100100% 的评测数据,4≤n≤5×105,−109≤nums[i]≤1094≤n≤5×105,−109≤nums[i]≤109 。

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 N=5*100010; static int a[]=new int[N]; static int n; static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); public static void main(String[] args) throws IOException { StringTokenizer st=new StringTokenizer(br.readLine()); n=Integer.parseInt(st.nextToken()); st=new StringTokenizer(br.readLine()); for (int i = 1; i <= n; i++) { a[i]=Integer.parseInt(st.nextToken()); } //nums[d] < nums[c] < nums[a] < nums[b] //对于c而言 我想知道我的右侧是否有比我小的数 int rightMin[]=new int[n+1];//维护一个后缀最小值 rightMin[n]=n; for (int i = n-1; i > 0; i--) { if(a[i]<a[rightMin[i+1]]){ rightMin[i]=i; }else{ rightMin[i]=rightMin[i+1]; } } //站在c的角度上 我迫切的想知道我的左侧是否存在两个数满足 nums[a] < nums[b] //如果说当前的模拟的c< 我的左侧所有数中 次大的数时 说明我找到了 nums[c] < nums[a] < nums[b] 这样一种关系 //因为四大的数找到了,那么必然存在一个比它大的数 //我们维护一个单调递减的栈 当栈顶的元素小于我遍历到的数时 我们就找到了一个 nums[a] < nums[b]这样的序列 //这时我们将num[a] 也就是次大值poll并记录该值 max2 int max2=Integer.MIN_VALUE;; Deque<Integer> deque=new LinkedList<Integer>(); boolean f=false; for (int i = 1; i <= n; i++) { int u=a[i]; //将当前数作为c 看是否符合条件 if(u<max2 && u<rightMin[i]){ bw.write("YES"); f=true; break; } //当前的数可以用于更新max2 我们记录最大的max2 是为了使得更多的c更有可能满足条件 while(!deque.isEmpty() && deque.peekLast()<u)max2=Math.max(max2, deque.pollLast()); deque.add(u); } if(!f)bw.write("NO"); br.close(); bw.flush(); bw.close(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 23:23:28

code0 glm-5 企业实战:大型组织该怎么规划 AI 能力中台

大模型真正进入企业之后&#xff0c;很多组织很快就会发现一个挺现实的问题&#xff1a;做一个单点应用不难&#xff0c;难的是让它被更多场景稳定复用。 比如&#xff0c;一个部门已经做了智能客服&#xff0c;另一个部门又从头搭了一套知识库问答&#xff1b;一个团队接入了代…

作者头像 李华
网站建设 2026/7/11 23:22:20

TMC7300与PIC18LF46K40构建高效有刷直流电机控制系统

1. 项目背景与核心器件选型有刷直流电机&#xff08;BDC&#xff09;在工业控制、消费电子和自动化设备中广泛应用&#xff0c;但传统驱动方案存在效率低、控制精度差、体积大等问题。TMC7300作为一款高度集成的电机驱动器IC&#xff0c;与PIC18LF46K40微控制器组合&#xff0c…

作者头像 李华
网站建设 2026/7/11 23:18:51

Windows热键冲突深度解析:Hotkey Detective实战指南

Windows热键冲突深度解析&#xff1a;Hotkey Detective实战指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 在Windows操…

作者头像 李华
网站建设 2026/7/11 23:18:27

【1688API】商品列表采集

采集场景 在1688搜索页 输入搜索&#xff0c;搜出后得到的多个商品列表数据。采集字段 商品标题、价格、到手价、标签、已售数量、店铺名称、评价等字段。 采集结果 采集结果可导出为Excel&#xff0c;CSV&#xff0c;HTML&#xff0c;数据库等格式。导出为Excel示例&#xff1…

作者头像 李华
网站建设 2026/7/11 23:18:24

如何利用单北斗GNSS提升水库变形监测的安全性?

单北斗GNSS技术为水库的变形监测提供了新的解决方案&#xff0c;改善了监测的安全性。通过实时监控坝体、桥梁及其他结构的变形变化&#xff0c;确保能够及时发现潜在风险。单北斗变形监测定制方案能够根据不同项目需求&#xff0c;提供高精度的位移监测系统、适应各种复杂环境…

作者头像 李华
网站建设 2026/7/11 23:18:14

NVME-oF IP 设计2 :设计之前的调研!

随着NVMe协议逐渐成为高性能固态存储设备的主流接口标准&#xff0c;基于NVMe SSD的本地存储系统在带宽和延迟方面已能够满足现代数据中心与高性能计算应用的需求。在此基础上&#xff0c;研究重点逐渐从本地存储性能优化转向如何通过高速网络实现远程NVMe设备访问&#xff0c;…

作者头像 李华