D. Challenging Valleys

news2025/1/23 3:59:48

You are given an array a[0…n−1] of n integers. This array is called a “valley” if there exists exactly one subarray a[l…r] such that:

0≤l≤r≤n−1,
al=al+1=al+2=⋯=ar,
l=0 or al−1>al,
r=n−1 or ar<ar+1.
Here are three examples:
在这里插入图片描述

The first image shows the array [3,2,2,1,2,2,3], it is a valley because only subarray with indices l=r=3 satisfies the condition.

The second image shows the array [1,1,1,2,3,3,4,5,6,6,6], it is a valley because only subarray with indices l=0,r=2 satisfies the codition.

The third image shows the array [1,2,3,4,3,2,1], it is not a valley because two subarrays l=r=0 and l=r=6 that satisfy the condition.

You are asked whether the given array is a valley or not.

Note that we consider the array to be indexed from 0.

Input
The first line contains a single integer t (1≤t≤104) — the number of test cases.

The first line of each test case contains a single integer n (1≤n≤2⋅105) — the length of the array.

The second line of each test case contains n integers ai (1≤ai≤109) — the elements of the array.

It is guaranteed that the sum of n over all test cases is smaller than 2⋅105.

Output
For each test case, output “YES” (without quotes) if the array is a valley, and “NO” (without quotes) otherwise.

You can output the answer in any case (for example, the strings “yEs”, “yes”, “Yes” and “YES” will be recognized as a positive answer).

Example
inputCopy
6
7
3 2 2 1 2 2 3
11
1 1 1 2 3 3 4 5 6 6 6
7
1 2 3 4 3 2 1
7
9 7 4 6 9 9 10
1
1000000000
8
9 4 4 5 9 4 9 10
outputCopy
YES
YES
NO
YES
YES
NO
Note
The first three test cases are explained in the statement.

分析

  1. 题意:看看一个序列是否存在,当前某段序列(也可以是一个数),是否小于紧挨着它的左边那个数,是否小于相邻的右边那个数;也就是让这个序列或者这个单独的数,小于两边的数;此题要求一个序列只能存在一种情况,也就是有多个l,r都能满足条件,就不符合题意;
  2. l,r可以指向一段连续相同的数的序列,也可以共同指向一个单独的数,所以我们可以把重复元素去掉,直接比较单个数;一开始想着全部去重,这是不对的,因为同一个数字可能不是连续出现的,全去重了就不对了;然后考虑到局部部分去重,把连续的相同的数去掉,然后存放在一个数组里;
  3. 然后对第一个数、最后一个数特判,其他的数分别和两边的数相比较记录有几种满足的情况即可;
#include<bits/stdc++.h>

using namespace std;

int t, n, cnt;
int a[200005];
int b[200005];//把连续的数删掉的得到的数组

int main() {
    cin >> t;
    while (t--) {
        cin >> n;
        for (int i = 0; i < n; ++i) {
            cin >> a[i];
        }
        cnt = 0;//当前数组的元素个数
        b[cnt++] = a[0];
        //把连续的数去重
        for (int i = 1; i < n; ++i) {
            if (a[i] != a[i - 1])
                b[cnt++] = a[i];
        }
        int sum = 0;//满足山谷的情况数
        if (cnt == 1 || cnt == 2) {
            cout << "YES" << endl;
        } else {
            //特判第一个数
            if (b[0] < b[1])
                sum++;
            //中间的数和前后比
            for (int i = 1; i < cnt - 1; ++i) {
                if (b[i] < b[i - 1] && b[i] < b[i + 1])
                    sum++;
            }
            //特判最后一个数
            if (b[cnt - 1] < b[cnt - 2])
                sum++;
            if (sum > 1)
                cout << "NO" << endl;
            else
                cout << "YES" << endl;
        }

    }

    return 0;
}


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

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

相关文章

网页数据抓取工具-数据采集软件

随着时代的不断的发展&#xff0c;我们已经进入一个大数据数字时代&#xff0c;每个人在互联网上都离不开数据的汇总分析以及数据的应用&#xff0c;不管是整理行业的数据&#xff0c;还是分析同行的数据。今天小编就教大家如何用数据采集软件快速抓取到你想要的信息&#xff0…

服务器cpu一直处于100%解决思路

故障描述 网友截图咨询:cpu一直处于100%,请问是什么原因所致?突然出现的,从昨天14点左右就这样子,服务器很卡,将所有网站,web服务,mysql服务,防火墙都停止了,cpu一直处于100%没有改变。 原因分析 cpu突然满载,可能的原因有很多,最常见的就是被cc攻击了导致的。 …

iTOP3399开发板Qt蜂鸣器和LED测试

QLed 测试资料在网盘“iTOP-3399 开发板\iTOP-3399 开发板\02_iTop-RK3399 开发资料汇总&#xff08;不含光盘内 容&#xff09;\05_iTOP-3399 开发板 Qt 应用开发资料\3399 开发板 QT 测试-QtLED 和 buzzer”目录下&#xff0c;我们将要运行 QLed 程序到开发板的 Qt 系统上。参…

【LeetCode每日一题】——118.杨辉三角

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 118.杨辉三角 四【题目描述】 给定一个非负整数 n…

CubeMX+VSCode+Ozone的STM32开发工作流(三)利用Ozone进行可视化调试和代码分析

neozng1hnu.edu.cn 本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架&#xff0c;你可以直接克隆仓库&#xff0c;阅读仓库下的Markdown文档获得更好的体验&#xff0c;记得点一个小⭐&#xff1a;basic_framework: basic_framework (gitee.com)所有安…

[附源码]Python计算机毕业设计宠物领养系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本

很多时候&#xff0c;您需要替换 Word 文档中的特定文本或短语。MS Word 具有针对此类情况的内置功能&#xff0c;您可以一键替换所需的文本。在本文中&#xff0c;您将学习如何使用 Python 以编程方式查找和替换 Word 文档中的文本。当您需要替换一堆文档中的文本时&#xff0…

Redis的分布式锁问题(九)Redis + Lua 脚本实现分布式锁

Redis的分布式锁问题&#xff08;九&#xff09;Redis Lua 脚本实现分布式锁 上集回顾 Lua的简单介绍 redis调用函数 set name jack set name Rose&#xff0c;再执行get name redis的 EVAL 命令 Lua脚本解决unLock业务流程 代码实现 unLock.lua RedisTemp…

APS自动排程在制药行业的应用

制药企业&#xff0c;作为流程工业的一种&#xff0c;既有流程工业所具有的共性也有特殊性&#xff0c;通过发酵、萃取、灌装等生物、化学、物理变化&#xff0c;产生新物质达到增值目的。通常以批量或连续的方式进行生产&#xff0c;需要严格的过程控制和安全措施。生产运行、…

hadoop 3.x大数据集群搭建系列4-安装Spark

文章目录一. 下载spark和scala并解压二. 配置SPARK_HOME环境变量三. 修改配置3.1 修改 spark-defaults.conf3.2 修改spark-env.sh3.3 修改slaves文件四. 将spark目录分发到其他节点五. 启动Spark集群六. 在web界面查看Spark UI七. 测试八. Yarn模式8.1 启动hdfs、yarn服务8.2 修…

笔记本电脑自带录屏吗?笔记本电脑怎么录屏

​现如今&#xff0c;电脑屏幕录制功能越来越成为我们生活中不可或缺的一部分。比如网课录制、游戏画面、软件教程等。很多小伙伴可能知道笔记本电脑拥有录屏功能&#xff0c;但是却不知道笔记本电脑怎么录屏。下面就让小编详细介绍一下&#xff0c;笔记本电脑录屏的方法。 一&…

骨传导耳机的利与弊有哪些?骨传导耳机到底好不好?

耳机大家应该都知道&#xff0c;但是骨传导耳机&#xff0c;大家或许就有点陌生了。目前网上也有很多关于骨传导耳机的科普和盘点&#xff0c;但是个人认为都过于零碎不明了&#xff0c;而我今天就用我玩骨传导耳机好几年的经验和知识&#xff0c;以骨传导用户的角度写了这篇文…

接口幂等设计

文章目录如何设计幂等幂等设计的基本流程建防重表根据状态机分布式锁获取 token如何设计幂等 既然这么多场景需要考虑幂等&#xff0c;那我们如何设计幂等呢&#xff1f; 幂等意味着 一条请求的唯一性。不管是你哪个方案去设计幂等&#xff0c;都需要一个全局唯一的ID&#xf…

【第五部分 | JS WebAPI】2:DOM 元素操作

目录 1-1 改变元素内容&#xff08;去除html和空格换行&#xff09; 1-2 改变元素内容&#xff08;保留html和空格换行 用的最多&#xff09; 1-3 获取元素的内容 [ 更多其它可操作的元素属性 ] 2-1 修改元素的属性 2-2 修改表单元素属性 2-3 使用this指向函数调用者 3…

day35 XSS跨站反射存储DOM盲打劫持

前言 #知识点&#xff1a; 1、XSS跨站-原理&攻击&分类等 2、XSS跨站-反射型&存储型&DOM型等 3、XSS跨站-攻击手法&劫持&盗取凭据等 4、XSS跨站-攻击项目&XSS平台&Beef-XSS 1、原理 指攻击者利用网站程序对用户输入过滤不足&#xff0c;输…

redis<二>spring使用redis,配置远程登录和密码

使用默认的redis配置 改pom, 加入redis依赖,版本可以不需要写&#xff0c;由spring的父工程控制。 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <!--整合redis--> <dependency><groupId>…

Spring Bean基础-4

1. 定义Bean: 什么是BeanDefinition? 什么是BeanDefinition?BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口, 包含: Bean 的类名Bean 行为配置元素, 如作用域、自动绑定的模式、生命周期回调等其他 Bean 引用, 又可称作合作者 (Collaborators) 或者依赖 …

Feign的简介及使用

一、Feign简介 Feign是一个声明式的http客户端&#xff0c;官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送&#xff0c;解决代码可读性差&#xff0c;编程体验不统一、参数复杂URL难以维护的问题。 二、使用Feign的步骤 1.引入依赖…

网络原理(Java网络编程)

1.局域网和广域网 局域网LAN: 即 Local Area Network,简称LAN. 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的.局域网一般可以由交换机或路由器组建. 广域网WAN: 即 Wide Area Network,简称WAN. 广域网是将多个局域网…

【28-业务开发-基础业务-属性管理-SKU和SPU基本概念-SKU和SPU关联关系-属性实体之间的关联关系-批量菜单创建】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…