P3512 [POI2010]PIL-Pilots-洛谷luogu
刚研究完单调队列和单调栈
于是就找题做了
发现了这道蓝题
以为很简单
就着手来写了
然而
并不是我想的那样
只是有一点点思路
无奈
还是看了题解
好吧题解是真的挺好的
--------------------------------------------------------------
题目描述
In the Byteotian Training Centre, the pilots prepare for missions requiring extraordinary precision and control.
One measure of a pilot's capability is the duration he is able to fly along a desired route without deviating too much - simply put, whether he can fly steadily. This is not an easy task, as the simulator is so sensitive that it registers even a slightest move of the yoke1.
At each moment the simulator stores a single parameter describing the yoke's position.
Before each training session a certain tolerance level
is set.
The pilots' task then is to fly as long as they can in such a way that all the yoke's position measured during the flight differ by at most
. In other words, a fragment of the flight starting at time
and ending at time
is within tolerance level
if the position measurements, starting with
-th and ending with
-th, form such a sequence
that for all elements
of this sequence, the inequality
holds.
Your task is to write a program that, given a number
and the sequence of yoke's position measurements, determines the length of the longest fragment of the flight that is within the tolerance level
.
给定n,k和一个长度为n的序列,求最长的最大值最小值相差不超过k的序列
输入输出格式
输入格式:
In the first line of the standard input two integers are given,
and
(
,
), separated by a single space, denoting the tolerance level and the number of yoke's position measurements taken.
The second line gives those measurements, separated by single spaces. Each measurement is an integer from the interval from
to
.
第一行两个有空格隔开的整数k(0<=k<=2000,000,000),n(1<=n<=3000,000),k代表设定的最大值,n代表序列的长度。第二行为n个由空格隔开的整数ai(1<=ai<=2000,000,000),表示序列。
输出格式:
Your program should print a single integer to the standard output:
the maximum length of a fragment of the flight that is within the given tolerance level.
一个整数代表最大的符合条件的序列
输入输出样例
说明
样例解释:5, 8, 6, 6 和8, 6, 6, 9都是满足条件长度为4的序列
---------------------------------------------------------------------------------------
n<=3000000,单调队列。
因为要同时维护最大值和最小值,所以需要两个单调队列,记录序号和最大最小值,然后
从左往右枚举一遍O(n)的复杂度即可。
单调队列的实现以最大值为例,当队列非空且队尾的数没有现在枚举到的这个数大时,就
让队尾的数出队,因为在接下来的情况中它们永远不会是一个区间的最大值。最小值的队列同理。把当前位置加入最大最小值队列。然后比较最大值队列的队首即最大值和最小值,如果它们的差超过了k,就看一下最大值和最小值的队首哪个的序号更小,让序号更小的出队,同时更新当前队列的最前节点的位置,继续比较两个的队首,直到最大最小值的差小于等于k时,用当前位置减去当前队列的最前节点的位置再加一,就是目前的符合条件的序列长度,与最长值比较即可。
当前队列的最前节点的位置初始值为1.
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
ll hx = ,tx = ,hn = ,tn = ,len=,pre=; //最大值最小值的“头指针”“尾指针”
ll k,a[],qx[],qn[],n; //qx存最大值,qn存最小值 inline ll read()
{
ll ans = ,op = ;
char ch = getchar();
while(ch <'' && ch >'')
{
if(ch == '-')
op = -;
ch = getchar();
}
while(ch >= '' &&ch <= '')
{
(ans *= ) += (ch - '');
ch = getchar();
}
return ans * op;
} //快读 int main()
{
k = read();
n = read();
for(ll i=; i<=n; i++)
a[i] = read();
qx[]=;
qn[]=;
for(int i=;i<=n;i++)
{
while(hx <= tx && a[qx[tx]] < a[i])
tx--;
while(hn <= tn && a[qn[tn]] > a[i])
tn--;
qx[++tx] = i;
qn[++tn] = i;
while(a[qx[hx]] - a[qn[hn]] >k)
{
if(qx[hx] < qn[hn])
{
pre = qx[hx]+;
hx++;
}
else
{
pre = qn[hn]+;
hn++;
}
}
len=max(len,i-pre+);
}
printf("%lld",len);
return ;
}
P3512 [POI2010]PIL-Pilots-洛谷luogu的更多相关文章
- P1654 OSU!-洛谷luogu
传送门 题目背景 原 <产品排序> 参见P2577 题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败 ...
- 【原创】洛谷 LUOGU P3366 【模板】最小生成树
P3366 [模板]最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N ...
- 【原创】洛谷 LUOGU P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...
- 【原创】洛谷 LUOGU P3373 【模板】线段树2
P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第 ...
- 【原创】洛谷 LUOGU P3372 【模板】线段树1
P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...
- P1440 求m区间内的最小值--洛谷luogu
题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...
- P2251 质量检测--洛谷luogu
传送门 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的分值Q[m] = min{A1, A2, ... Am},以及 ...
- P4550 收集邮票-洛谷luogu
传送门 题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢 ...
- P3200 [HNOI2009]有趣的数列--洛谷luogu
---恢复内容开始--- 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3& ...
- 逆元-P3811 【模板】乘法逆元-洛谷luogu
https://www.cnblogs.com/zjp-shadow/p/7773566.html -------------------------------------------------- ...
随机推荐
- MVC 获取控制器名称和Action名称(转载)
MVC在filter中如何获取控制器名称和Action名称 使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不 ...
- 单机安装Hadoop
单机安装hadoop ------------------------------------------------------------------ 操作系统:centos7 64 位 hado ...
- [android] 手机卫士欢迎细节和主界面
splash界面的细节 ctrl + O 搜索 在去标题的时候,对话框主题被去掉了,有点丑,现在既要有新版本的对话框又不显示标题 把清单文件中activity节点的主题去掉 进入到applicatio ...
- Python带你轻松进行网页爬虫
前不久DotNet开源大本营通过为.NET程序员演示如何在.NET下使用C#+HtmlAgilityPack+XPath进行网页数据的抓取,从而为我们展示了HtmlAgilitypack利器的优点和使 ...
- Nginx + 阿里云SSL + tomcat 实现https访问代理
第一步:阿里云申请云盾证书服务 第二步:下载证书 第三步:修改Nginx配置 1. 证书文件214033834890360.pem,包含两段内容,请不要删除任何一段内容. 2. 如果是证书系统创建的C ...
- Frobenius norm(Frobenius 范数)
Frobenius 范数,简称F-范数,是一种矩阵范数,记为||·||F. 矩阵A的Frobenius范数定义为矩阵A各项元素的绝对值平方的总和,即 可用于 利用低秩矩阵来近似单一数据矩阵. 用数学表 ...
- Python args kwargs 技巧
def f(*args): print(args) a=[1, 2, 3] f(a) f(*a) 运行结果: ([1, 2, 3],) (1, 2, 3) def f(**kwargs): print ...
- 通过PHP来 获取文件内容 并且分割字符串 呈现在表格中
<?php $aaa = file_get_contents("names.txt"); $data = explode("\n", $aaa); for ...
- loj#2509. 「AHOI / HNOI2018」排列(思维题 set)
题意 题目链接 Sol 神仙题Orz 首先不难看出如果我们从\(a_i\)向\(i\)连一条边,我们会得到以\(0\)为根的树(因为每个点一定都有一个入度,出现环说明无解),同时在进行排列的时候需要保 ...
- 【代码笔记】Web-Javascript-JavaScript简介
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...