HDU 3530Subsequence(单调队列)

题意

题目链接

给出$n$个数,找出最长的区间,使得区间中最大数$-$最小数 $>= m$ 且$<= k$

Sol

考虑维护两个单调队列。

一个维护$1 - i$的最大值,一个维护$1 - i$的最小值。

至于两个限制条件。

$<=k$可以通过调整队首来满足

$>=a$可以在更新答案的时候限制。

 

刚开始的时候我犯了两个错误

1、直接用数组的指针当下标—>队列没学好

2、更新答案的时候在两个队列的队首取最小,这是不对的。因为队首元素可能是后来被更新的,真正的答案可能比当前优

/*
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<vector>
#define Pair pair<int, int> 
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
using namespace std;
const int MAXN = 1e6 + 10;
const double eps = 1e-10, Dlt = 0.97, INF = 1e9 + 7;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, x, y, a[MAXN];
int h1, t1, q1[MAXN], h2, t2, q2[MAXN];
int main() {while(scanf("%d %d %d", &N, &x, &y) != EOF) {int ans = 0, pre = 0;h1 = h2 = 1; t1 = t2 = 0;for(int i = 1; i <= N; i++) {a[i] = read();while(h1 <= t1 && a[i] > a[q1[t1]]) t1--;//鍖洪棿鏈€澶у€?while(h2 <= t2 && a[i] < a[q2[t2]]) t2--;//鍖洪棿鏈€灏忓€?q1[++t1] = i;q2[++t2] = i;while(h1 <= t1 && h2 <= t2 && a[q1[h1]] - a[q2[h2]] > y) {if(q1[h1] < q2[h2]) pre = q1[h1], h1++;else pre = q2[h2], h2++;}if(h1 <= t1 && h2 <= t2 && (a[q1[h1]] - a[q2[h2]] >= x)) ans = max(ans, i - pre); }printf("%d\n", ans);}return 0;
}
/*
5 3 3
1 2 3 4 5
*/

 

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

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

相关文章

oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限

查询用户拥有的权限&#xff1a;1.查看所有用户&#xff1a;select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限)&#xff1a;select *from dba_sys_privs;select *from user_sys_privs; 3.查看…

linux 中文件夹的文件按照时间倒序或者升序排列

1&#xff0c;按照时间升序 命令:ls -lrt 详细解释: -l use a long listing format 以长列表方式显示&#xff08;详细信息方式&#xff09; -t sort by modification time 按修改时间排序&#xff08;最新的在最前面&#xff09; -r reverse order while sorti…

PHP中关于时间(戳)、时区、本地时间、UTC时间等的梳理

PHP中关于时间&#xff08;戳&#xff09;、时区、本地时间、UTC时间等的梳理 在PHP开发中&#xff0c;我们经常会在时间问题上被搞糊涂&#xff0c;比如我们希望显示一个北京时间&#xff0c;但是当我们使用date函数进行输出时&#xff0c;却发现少了8个小时。几乎所有的php猿…

WebServiceStudio.exe测试webservice接口工具

WebServiceStudio.exe测试webservice接口工具 下载链接 https://pan.baidu.com/s/1gf8ajS3 打开工具WebServiceStudio&#xff0c;如下填写地址&#xff0c;点击【Get】按钮 会显示出需要传参的地方&#xff0c;在value中填写xml参数 输入完value值后&#xff0c;点击【Invok…

oracle最大实例数,【ORA-16196】一个实例在其生命周期里最多只能装载和打开一个数据库...

如果使用“alter database open;”命令打开一个曾经被“alter database close;”命令关闭的数据库时&#xff0c;您将会收到如下的报错信息&#xff1a;"ORA-16196: database has been previously opened and closed"这个报错的原因是什么呢&#xff1f;原因是&#…

Navicat工具导出Mysql数据表结构到Excel文件中

原文链接&#xff1a;https://blog.csdn.net/zt15732625878/article/details/77978266 ------------------------------------------------------------------------ 前言 项目中数据库设计已经完成&#xff0c;现在到了代码实现的阶段&#xff0c;数据库中没有数据&#xff…

利用MAVEN的profile 实现打包环境的切换

乐哉码农产生问题的背景 由于在项目开发的时候&#xff0c;我们一般都是使用的本地库&#xff0c;数据库连接写的是本地的&#xff0c;如果我们将项目打成war的时候&#xff0c;里面的配置连接写的是我们本地的&#xff0c;当我们直接把war拷贝到服务器上面进行部署的时候&…

服务器oracle优化,oracle服务器配置及优化

1.在ORACLE中实现分布式快速存取和充实内存是很重要的。要不惜任何代价避免页面调度和交换﹐每次都必须把系统全局区(SGA)放到内存。将SGA放到内存中﹐在INIT.ORA中设置参数 PRE_PAGE_SGAPRE_PAGE_SGAYES2.回卷段的竟争会降低系统的性能。SELECT GETS,WAITS from V$ROLLSTAT;…

Android 常用的数据加密方式

前言 Android 很多场合需要使用到数据加密&#xff0c;比如&#xff1a;本地登录密码加密&#xff0c;网络传输数据加密&#xff0c;等。在android 中一般的加密方式有如下&#xff1a; 亦或加密AES加密RSA非对称加密当然还有其他的方式&#xff0c;这里暂且介绍以上三种加密算…

oracle可以注入吗,ORACLE 注入

1判断是什么数据库and exist(select * from dual)and exists(select * from user_tables)原理&#xff1a;dual表和user_tables表是oracle中的系统表返回正常&#xff0c;那么就可以肯定这是oracle。2查字段数order by 10-- //错误,列数小于10order by 3-- //正常,列数等于…

centos升级glibc(升级到 2.17版)

1、原先的系统glibc库的版本是2.12&#xff0c;需要升级到2.17版本。 下载地址&#xff1a; http://ftp.gnu.org/gnu/glibc/ http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz 这里可以选择你所需要的版本。 2、安装部署 [rootkafzook1 common]# tar -xf glibc-2.17.tar.g…

Day31 python基础--网络编程基础-socketserver

一&#xff0c;验证客户端合法性 #server端 import os import hmac import socket secret_key balex_sbdef auth(conn):msg os.urandom(32) #生成一个随机的字符串conn.send(msg) #发送到client端result hmac.new(secret_key,msg) #处理这个随机字符串&#xff0c;得到一…

康乐php一键脚本,kangle一键脚本

脚本简介1、本脚本是可以一键安装kangleEasypanelmysql商业集合脚本。2、脚本本身集成&#xff1a;PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7.1、PHP7.2、PHP7.3、MYSQL5.63、支持前台用户任意切换PHP5.3-7.3以适应网站程序Kangle一键脚本特点1.安装包内PHP套件以及Kangle套件均已…

oracle data guard方案,Oracle Data Guard 概念篇

一个Data Guard 配置由一个生产库和一个或者多个standby数据库组成&#xff0c;在Data Guard配置中&#xff0c;主库和备库都既可以是rac环境&#xff0c;也可以是单机环境。这篇文章主要介绍dataguard的一些基本知识dataguard的分类、dataguard的服务类型、dataguard的保护模式…

洛谷P4133 [BJOI2012]最多的方案(记忆化搜索)

题意 题目链接 求出把$n$分解为斐波那契数的方案数&#xff0c;方案两两不同的定义是分解出来的数不完全相同 Sol 这种题&#xff0c;直接爆搜啊。。。 打表后不难发现$<1e18$的fib数只有88个 最先想到的应该是直接把$n$加入到搜索状态里&#xff0c;然后枚举能被分成哪些 但…

centos一键安装redmine

官网给出的环境要求&#xff1a; http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements ------------------------------------------------------------------------------------------------------------- 下载一键安装&#xff1a;&#xff08;下载…

大话php设计模式视频,大话PHP设计模式

工厂模式用工厂方法或者类来实例化对象&#xff0c;而不是直接new。首先我们需要创建一个工厂类&#xff0c;比如Factory.php。如果不使用工厂模式的&#xff0c;我们需要一个对象的时候通常需要new Inexistence\girlfriend();然而我们一般不只在一个地方需要这个对象&#xff…

Git 2.19 对Diff、Branch和Grep等做了改进

\Git的最新版带来了丰富的新功能以及内部更新&#xff0c;包括改进的diff、branch和grep&#xff0c;更好的命令行补全&#xff0c;新的range-diff命令等。\\Git diff现在可以正确地标记以intent-to-add参数添加的新文件路径。intent-to-add可以和git add命令一起使用&#xff…

su oracle c expdp,expdp/impdp 数据泵导入导出

useridtest/test --导出的用户&#xff0c;本地用户!!directorydmpfile --导出的逻辑目录&#xff0c;一定要在oracle中创建完成的&#xff0c;并且给用户授权读写权限dumpfilexx.dmp --导出的数据文件的名称&#xff0c;如果想在指定的位置的话可以写…

Centos 升级GLIBCXX3.4.25

32位系统: http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc6_4.7.2-5_i386.deb 64位系统: wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc6_8.2.0-7_amd64.deb 其他版本 http://ftp.de.debian.org/debian/pool/main/g/ 解压 ar -x libst…