小a的排列(牛客)
题意:
一个长度为n的排列。输入n个数 a[ i ],a[ i ] ∈ [1,n],要求找到长度最小的区间 [ l , r ],满足区间[ l , r ]内的数是连续的,且同时包含 数 x 和 数 y 。
思路:
容易得: 要想得到这个区间,这个区间内必须满足 “最大值 - 最小值 == r - l ” 。我们维护出每个数出现的位置,即p[x]表示数x的位置,考虑每次迭带更新答案。维护四个变量 分别表示当前区间的左右端点,最大最小值。
首先找到[p[x], p[y]]中的每个数位置的最大最小值来找到下一轮的 l, r,接下来不断扩充当前的l, r,扩充的同时更新最大值和最小值,再不断用新的最大值最小值更新 l, r,直到找到一段连续区间。
#include<iostream>
#include<cstdio>
#include <cctype>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define ll long long
#define mem(a,x) memset(a,x,sizeof(a))
#define se second
#define fi first
const ll mod=1e9+;
const int INF= 0x3f3f3f3f;
const int N=2e5+; int a[N],p[N]; int main()
{
int n,x,y;
cin>>n>>x>>y;
int l,r,maxn=-,minn=INF;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
p[a[i]]=i;
}
l=p[x]; r=p[y];
if(l>r) swap(l,r); for(int i=l;i<=r;i++)
{
maxn=max(maxn,a[i]);
minn=min(minn,a[i]);
}
int L=INF,R=-;
for(int i=minn;i<=maxn;i++)
{
L=min(L,p[i]);
R=max(R,p[i]);
}
int tmn=minn,tmx=maxn;
if(tmx-tmn==R-L)
{
cout<<L<<' '<<R<<endl;
return ;
}
while(tmx-tmn!=r-l)
{
while(L < l) tmn=min(tmn, a[--l]), tmx=max(tmx, a[l]);
while(r < R) tmn=min(tmn, a[++r]), tmx=max(tmx, a[r]); for(int i = tmn; i <= minn; i++) L=min(L, p[i]), R=max(R, p[i]);
for(int i = maxn; i <= tmx; i++) L=min(L, p[i]), R=max(R, p[i]);
maxn=tmx;
minn=tmn;
}
cout<<l<<' '<<r<<endl;
}
小a的排列(牛客)的更多相关文章
- 第k小团+bitset优化——牛客多校第2场D
模拟bfs,以空团为起点,用堆维护当前最小的团,然后进行加点更新 在加入新点时要注意判重,并且用bitset来加速判断和转移构造 #include<bits/stdc++.h> #incl ...
- 牛客小白月赛13 小A的柱状图(单调栈)
链接:https://ac.nowcoder.com/acm/contest/549/H来源:牛客网 题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形,但是小A的柱状图却不是一个规范的 ...
- 小A的柱状图_via牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28537/Q 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语 ...
- 牛客小白月赛13 小A买彩票 (记忆化搜索)
链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客小白月赛13-J小A的数学题 (莫比乌斯反演)
链接:https://ac.nowcoder.com/acm/contest/549/J来源:牛客网 题目描述 小A最近开始研究数论题了,这一次他随手写出来一个式子,∑ni=1∑mj=1gcd(i,j ...
- 牛客OI周赛7-提高组 A 小睿睿的等式
链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...
- 牛客小白月赛13 小A的回文串(Manacher)
链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 题目描述 小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的.所以小A只想知道给定的一个 ...
- 牛客小白月赛13 小A的最短路(lca+RMQ)
链接:https://ac.nowcoder.com/acm/contest/549/F来源:牛客网 题目描述 小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径.小A从当前的一个 ...
- 牛客 小a与星际探索 bfs
链接:https://ac.nowcoder.com/acm/contest/317/C?&headNav=acm来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...
- 牛客练习赛B题 筱玛的排列(找递推规律)
链接:https://ac.nowcoder.com/acm/contest/342/B来源:牛客网 筱玛的排列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语 ...
随机推荐
- 【Sqoop学习之一】Sqoop简介
环境 sqoop-1.4.6 Sqoop:将关系数据库(oracle.mysql.postgresql等)数据与hadoop数据进行转换的工具. 两个版本:两个版本完全不兼容,sqoop1使用最多:s ...
- MinGW离线安装
今天安装下载MinGW-W64-install.exe安装MinGW试了好几次都失败了 因此决定用离线安装包进行安装 1.下载 下载地址https://sourceforge.net/projects ...
- GroupBy之后加ToList和不加ToList有什么区别吗?
class Program { static void Main(string[] args) { List<Person> ...
- [hdu 4841]圆桌问题 | 约瑟夫问题 STL-vector
原题 问题描述: 经典的约瑟夫问题,有2n个人,其中n个好人n个坏人,使得删去n人后,剩下的全为好人.m为每次数的人数. n<=32767 题解: 首先考虑n的范围,暴力肯定行不通,所以会想到线 ...
- Java开发笔记(一百三十九)JavaFX的输入框
循着Swing的旧例,JavaFX仍然提供了三种文本输入框,分别是单行输入框TextField.密码输入框PasswordField.多行输入框TextArea.这些输入框都由抽象类TextInput ...
- dom元素新增后不会触发事件
<!DOCTYPE HTML> <html> <head> <title>checkbox设置只能单选</title> <script ...
- GC收集器
新生代收集器 Serial New 单线程收集器,工作时必须暂停其他线程: 简单高效,没有线程交互开销: 基于复制算法: Parallel New 对Serial的改进,多线程: CPU数量<4 ...
- vue生成带logo的二维码
输入命令行下载 npm install vue_qrcodes <template> <div> <qrcode :url="></qrcode&g ...
- centos jira wiki 开机自启
启动jira 和 wiki 需要java环境变量 操作步骤: 在 /etc/rc.d/rc.local 文件中[ 注意要有可执行权限 ] export JAVA_HOME=xxxxxxxx expor ...
- Centos 7 添加开机启动
1.添加启动服务 添加docker开机启动服务 [root@localhost ~]# systemctl enable docker.serviceCreated symlink from /etc ...