新手理解(可能有理解错误的地方,请指教,嘿嘿)

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#define M 100005
using namespace std;
int a,n,m,k,i,p[M],mintail,minhead,maxtail,maxhead,ans,trmp,last,last2;
struct PP{
int viluee; //值 (单词打错了不要建议)
int markee; //标号
}maxque[M],minque[M];
int main(){
while(~scanf("%d%d%d",&n,&m,&k))
{ //清零
ans=;
maxhead=;maxtail=;minhead=;mintail=;
last=last2=;
memset(minque,,sizeof(minque));memset(maxque,,sizeof(maxque));
//输入
for(i=;i<=n;i++)
scanf("%d",&p[i]); for(i=;i<=n;i++)
{
while(maxhead<=maxtail&&maxque[maxtail].viluee<p[i]) maxtail--;//维持最大
maxque[++maxtail].viluee=p[i];maxque[maxtail].markee=i; while(minhead<=mintail&&minque[mintail].viluee>p[i]) mintail--;//维持最小
minque[++mintail].viluee=p[i];minque[mintail].markee=i; while(maxque[maxhead].viluee-minque[minhead].viluee>k)
{
if(maxque[maxhead].markee<=minque[minhead].markee)
last=maxque[maxhead++].markee; //last保存的最大值的标号j是当前最大值-最小最 >k
else //的标号,而不是maxhead++后的标号,目的是让j后面
last2=minque[minhead++].markee; // 元素包括进(当前以i为队尾的最大元素个数)
//特别容易搞错,气死我了
}
if(maxque[maxhead].viluee-minque[minhead].viluee>=m)
{
ans=max(ans,i-max(last,last2)); //确保2个队列的元素都有
}
}
printf("%d\n",ans);
}
return ;
}

HDU 3530的更多相关文章

  1. Subsequence HDU - 3530

    Subsequence HDU - 3530 方法:单调队列区间最大最小 错误记录(本地写错)的原因:写成每次试着扩展右端点,却难以正确地处理"在多扩展右端点之后减去多扩展的部分" ...

  2. hdu 3530 单调队列最值

    /** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删 ...

  3. hdu 3530 Subsequence

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3530 Subsequence Description There is a sequence of i ...

  4. 【单调队列+尺取】HDU 3530 Subsequence

    acm.hdu.edu.cn/showproblem.php?pid=3530 [题意] 给定一个长度为n的序列,问这个序列满足最大值和最小值的差在[m,k]的范围内的最长子区间是多长? [思路] 对 ...

  5. HDU 3530 Subsequence(单调队列)

    传送门 Description There is a sequence of integers. Your task is to find the longest subsequence that s ...

  6. hdu 3530 Subsequence 单调队列

    题目链接 题目给出n个数, 一个下界m, 一个上界k, 让你求出最长的一段序列, 满足这段序列中的最大的数-最小的数<=k&&>=m, 输出这段长度. 可以维护两个队列, ...

  7. hdu 3530 "Subsequence" (单调队列)

    传送门 题意: 给出一个序列,求最长的连续子序列,使得 m ≤ Max-Min ≤ k 我的理解: 定义数组 a[] 存储输入的 n 个数: 定义两个双端队列: deque<int >qM ...

  8. HDU 3530 单调队列

    题目大意:给你n个数, 让你问你最长的满足要求的区间有多长,区间要求:MAX - MIN >= m && MAX - MIN <= k 思路:单调队列维护递增和递减,在加入 ...

  9. hdu 3530 区间和在一定范围内最长区间

    http://acm.hust.edu.cn/vjudge/problem/11253 这题要找到区间和在[m,k]范围内的最长区间 用两个单调序列保存区间最大值和最小值.当最大值-最小值>k时 ...

  10. Subsequence(hdu 3530)

    题意:给你一个长度为n的数列,要求一个子区间,使得区间的最大值与最小值的差s满足,m<=s<=k,求满足条件的最长子区间 /* 单调队列 我们可以用单调队列分别维护最大值和最小值 当差值大 ...

随机推荐

  1. 08-SV面向对象编程的高级技巧指南

    1.原始类与扩展类 (1)原始类被称为父类或者超类,扩展类被称为派生类或者子类.扩展类可以直接访问原始类和其本身的所有变量,应该将原始类中的子程序定义成虚拟的,这样它们就可以在扩展类中重定义.new函 ...

  2. ADO.NET中的数据库帮助类

    ADO.NET是.net framework中的一个重要模块,用于程序和数据源的连接,它的类都位于 System.Data.dll 中. 用于SQLServer的命名空间:System.Data.Sq ...

  3. 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 读后感1

    2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...

  4. py 二级习题(turtle)

    用turtle画一个正方形 import turtle turtle.penup() turtle.goto(-100,-100) turtle.pendown() turtle.begin_fill ...

  5. Iptables防火墙(未完)

    来自深信服培训第二天下午课程 软防跟硬防 Linux包过滤防火墙概述 netfilter 位于Linux内核中的包过滤功能体系 称为Linux防火墙的"内核态" iptables ...

  6. Pi和e的积分

    Evaluate integral $$\int_{0}^{1}{x^{-x}(1-x)^{x-1}\sin{\pi x}dx}$$ Well,I think we have $$\int_{0}^{ ...

  7. 【资源分享】Gmod自瞄自动开枪脚本

    *----------------------------------------------[下载区]----------------------------------------------* ...

  8. LED And Incandescent, Who Is Suitable For Holiday Lighting?

    Fast-fire advantages of LED lighting: Eco-friendly-LEDs are not made of toxic chemicals, such as mer ...

  9. Java代码手段防止非法请求——防盗链

    Java代码手段防止非法请求,思路如下:        1. 获取到当前请求的域名,如www.a.com        2. 获取到请求资源的上一个地址        3. 判断上一个地址是否为空,如 ...

  10. PHP实现导出Excel文件

    实现代码: private function exportExcel($params) { $arr = $this->getExportData($params); // 获取需要导出的信息( ...