小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,其他语 ...
随机推荐
- Python:self理解
Python类 class Student: # 类变量,可以通过类.类变量(Student.classroom)或者实例.类变量(a.classroom)方式调用 classroom = '火箭班' ...
- android基础---->SharedPreferences的使用
SharedPreferences 还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的,存储的数据是一个字符串,读取出来的数据仍然是字符串.这样你应该就能明显地感觉到 ...
- Windows常用网络命令(3)
5.Netstat Netstat命令可以帮助网络管理员了解网络的整体使用情况.它可以显示当前正在活动的网络连接的详细信息,例如显示网络连接.路由表和网络接口信息,可以统计目前总共有哪些网络连接正在运 ...
- QML 下拉列表框的使用
世界上一成不变的东西,只有"任何事物都是在不断变化的"这条真理. -- 斯里兰卡 ComboBox { id:combox x: structureTab_label2.x+str ...
- QT QML与C++混搭
"那些杀不死我的必使我更加强大"----尼采 QML与C++混合编程就是使用QML高效便捷地构建UI,而C++则用来实现业务逻辑和复杂算法. ML访问C++Qt集成了QML引擎和Q ...
- 微信小程序获取位置
获取位置 getLocation wx.getLocation({ type: 'wgs84', success (res) { const latitude = res.latitude const ...
- centos将nginx服务设置为开机自动启动
centos将nginx服务设置为开机自动启动 1.在/etc/init.d下创建文件nginx 发现原来就有并且配置就是默认的,而且是正确的 命令为: vim /etc/init.d/nginx 需 ...
- DjangoRestFramework学习二之序列化组件、视图组件
本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组件 首先按照restful规范咱们创建一些api接口,按照下面这些形式写吧: ...
- python3的 基础
]print(list(set(lst))) # 面试题: # a = 10 # b = 20 # a,b = b,a # 10000% # print(b) # 10 # print(a ...
- mongdb基本使用
mongodb创建用户,设置密码 参考:https://www.jianshu.com/p/237a0c5ad9fa MongoDB内置的数据库角色有: 1. 数据库用户角色:read.readWri ...