2024湖南理工学院程序设计竞赛(同步赛) G. 区间递减(思维题 分类讨论 ST表)

题目

https://ac.nowcoder.com/acm/contest/82672/G

思路来源

出题人 涼風青葉7代码

题解

注意到三种情况即可,

第一种情况,10 9 8 1 2,保留1

第二种情况,6 5 10 9 4 4,保留5 4 4

第三种情况,6 5 4,全保留

所以,策略是:

(1) 考察区间最小值,如果最小值后如果有增的,那么最小值前也都得删完 

(2) 区间最小值后面比最小值大的都是得删的,只有小于等于最小值的才能留着

(3) 如果最小值出现在末尾,[l,r]从左往右一直递减,那么操作次数为0

(4) 如果(1)-(3)都不满足,那么一定是最小值出现在末尾,

并且存在p(l<p<r)使得区间[p,r]满足(3),

此时[l,p-1]还有最小值w,对[l,p-1]的最小值w用(1),对[p,r]用(2)

也就是,[l,p-1]区间内只保留最小值w,[p,r]区间内只保留不超过w的值,此时只有两种数字

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10,M=18;
int n,q,a[N],b[N][M],dp[N],lg[N],l,r;
map<int,vector<int>>mp;
int rmq(int l,int r){int k=lg[r-l+1];return min(b[l][k],b[r-(1<<k)+1][k]);
}
int cnt(int v,int l,int r){auto &x=mp[v];int c1=upper_bound(x.begin(),x.end(),r)-x.begin();int c2=upper_bound(x.begin(),x.end(),l-1)-x.begin();return c1-c2;
}
int main(){scanf("%d%d",&n,&q);for(int i=1;i<=n;++i){scanf("%d",&a[i]);if(i>=2)lg[i]=lg[i>>1]+1;mp[a[i]].push_back(i);b[i][0]=a[i];if(i==1 || a[i]<=a[i-1])dp[i]=dp[i-1]+1;else dp[i]=1;}for(int j=1;j<=17;++j){for(int i=1;i+(1<<j)-1<=n;++i){b[i][j]=min(b[i][j-1],b[i+(1<<(j-1))][j-1]);}}while(q--){scanf("%d%d",&l,&r);int sz=r-l+1;if(dp[r]>=sz){puts("0");}else{int st=r-dp[r]+1;int v2=rmq(l,st-1),v=rmq(l,r);if(v2==v){printf("%d\n",sz-cnt(v,l,r));}else{int np=lower_bound(a+st,a+r+1,v2,greater<int>())-a;//<=v2printf("%d\n",sz-cnt(v2,l,st-1)-(r-np+1));}}}return 0;
}

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

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

相关文章

基于STM32单片机的二轮平衡小车

设计一个基于STM32单片机的二轮平衡小车是一个涉及硬件选择、软件编程、控制算法和机械设计的复杂项目。这里我可以给你一个大致的项目概述和一些基础的代码示例&#xff0c;但请注意&#xff0c;完整的项目设计和实现将需要更详细的规划和大量的调试工作。 1. 项目概述 二轮…

SpringBoot使用腾讯云实现短信功能

引入依赖 <!-- 腾讯云依赖 --> <dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.1.270</version> </dependency>配置文件 # 腾讯云短信配置 sms:tence…

jdk8的新特征

1&#xff1a; jdk8中新增的方法 在jdk8中对接口进行了增强&#xff0c;在jdk8之前 interface 接口名{ 静态常量&#xff1a; 抽象方法&#xff1a; } 在jdk8之后 interface 接口名{ 静态常量&#xff1a; 抽象方法&#xff1a; 默认方法&#xff1a; 静态方法&#xff1a; } 2…

linux使用/etc/hosts.deny拒绝恶意ssh到本机

一、目标 在某些特殊情况下&#xff0c;服务器有很多恶意暴力ssh破解的攻击。解决的办法有很多&#xff0c;这里用/etc/hosts.deny增加黑名单的方式来简单阻止一下。 二、前言 /etc/hosts.allow 优先于 /etc/hosts.deny。 如果在allow和deny文件中都有某个ip&#xff0c;那…

JAVA基础--IO

IO 什么是IO 任何事物提到分类都必须有一个分类的标准&#xff0c;例如人&#xff0c;按照肤色可分为&#xff1a;黄的&#xff0c;白的&#xff0c;黑的&#xff1b;按照性别可分为&#xff1a;男&#xff0c;女&#xff0c;人妖。IO流的常见分类标准是按照*流动方向*和*操作…

人形机器人的组成原理、相关技术和行业应用

人形机器人的部件和工作原理 人形机器人的部件通常包括机身、关节、传感器、驱动器、控制器等。其工作原理是通过传感器收集环境信息&#xff0c;控制器根据预设的算法和程序生成动作指令&#xff0c;驱动器驱动关节运动&#xff0c;从而实现机器人的各种动作。 人形机器人主要…

Google与哈佛大学的科学家团队共同创造了一张人脑中一个极小部分的精细地图

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

插件:Best HTTP

一、简介 WebSocket WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接可以创建持久性的连接&#xff0c;并进行双向数据传输。…

【SRC实战】无法支付的修改金额支付漏洞

挖个洞先 https://mp.weixin.qq.com/s/F4f8R4uKN0Q9BnTmjDMleg “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 一、企业用户&#xff0c;标准商品 “ 支付订单需要公对公银行卡转账&#xff0c;如何绕过&#xff1f;” 1、点击任意…

bert 的MLM框架任务-梯度累积

参考&#xff1a;BEHRT/task/MLM.ipynb at ca0163faf5ec09e5b31b064b20085f6608c2b6d1 deepmedicine/BEHRT GitHub class BertConfig(Bert.modeling.BertConfig):def __init__(self, config):super(BertConfig, self).__init__(vocab_size_or_config_json_fileconfig.get(vo…

java入门-面向对象的三大特性

面向对象三大特性 封装 什么是封装 封装 是将代码及其处理的数据绑定在一起的一种编程机制&#xff0c;该机制保证了程序和数据都不受外部干扰且不被误用。 封装的作用 访问控制符 方法传参-值传递 传参类型是基本类型 程序案例&#xff1a; public static void main(St…

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起&#xff0c;目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开&#xff0c;可以将任何容器与任何算法结合使用&#xff0c;只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …

Flutter 中的 Column 小部件:全面指南

Flutter 中的 Column 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Column 是一个垂直布局的小部件&#xff0c;用于将子控件沿着垂直轴排列。Column 与 Row 相对&#xff0c;Row 是水平布局&#xff0c;而 Column 则是垂直布局。它非常适合用来创建列式布局&#xf…

AJAX前端与后端交互技术知识点以及案例

Promise promise对象用于表示一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值 好处&#xff1a; 逻辑更清晰了解axios函数内部运作机制成功和失败状态&#xff0c;可以关联对应处理程序能解决回调函数地狱问题 /*** 目标&#xff1a;使用Promise管理异步任…

Linux-02

Linux常用命令&#xff1a; ls: 列出目录touch: 创建文件 touch test.txt echo:往文件写内容echo "i love linux" >>test.txtcd&#xff1a;切换目录pwd&#xff1a;显示目前的目录mkdir&#xff1a;创建一个新的目录 mkdir dai:创建目录dai mkdir -p test1/t…

基于springboot的物业服务平台的设计与实现

基于springboot的物业服务平台的设计与实现 摘 要:本文针对社区物业服务管理现状,采用B/S系统架构并选择MySQL数据库作为系统的数据存储系统,设计并实现一个以Spring Boot为后端框架、Vue为前端框架的社区物业服务管理平台。与传统的物业服务管理方式相比,该系统取代了传统…

印象笔记使用技巧

印象笔记&#xff08;Evernote&#xff09;是一款广泛使用的笔记应用&#xff0c;它帮助用户整理个人信息、文件和备忘录。以下是一些提高在印象笔记中效率的使用技巧&#xff1a; ### 1. 使用标签和笔记本组织笔记 - **建立笔记本**&#xff1a;为不同的项目或类别创建笔记本…

2024-Docker常用命令大全

Docker是一个流行的开源容器化平台&#xff0c;它允许开发人员将应用程序及其依赖项打包到可移植的容器中&#xff0c;并可以轻松地发布到任何Linux机器上。以下是Docker的一些常用命令总结&#xff1a; 一、帮助与启动类命令 启动Docker&#xff1a;sudo systemctl start do…

如何查看打包后的jar包启动方法main方法

背景 有时候我们在引用一个jar包的时候,想查看一个jar包的结构,这时候查看启动类就比较重要,因为一些关键配置是在启动类上的,这里教大家如何查看这个启动类(springboot项目) 步骤 首先打开jar包预览结构,可以使用解压缩工具直接双击打开或者预览结构 打开路径 META-INF/MA…

springfox.documentation.spi.DocumentationType没有OAS_30(从swagger2转到swagger3出现的问题)

直接开讲&#xff1a; 查看源码根本没有OAS_30的类型选择 右键package的springfox找到maven下载的包&#xff0c;打开到资源管理器 可以看到项目优先使用2版本的jar包&#xff0c;但是OAS_30只在3版本中才有&#xff0c;意思就是让项目优先使用以下图片中的3.0.0jar包 解决办法…