HDU6592 Beauty Of Unimodal Sequence
Beauty Of Unimodal Sequence
给一个序列,在满足单调递增或者单调递减或者先增后减的最长子序列集合里找到下标字典序最大以及最小的两个子序列,输出这两个子序列里元素的下标。
n≤3×105
moomhxy的题解
先正着求一遍LIS,再反着求一遍LIS,求出每个点作为上升子序列结尾的最大长度和每个点作为下降子序列开头的最大长度。
我们可以枚举这个单峰序列的峰顶是什么,这样最长长度就找到了。
然后考虑怎么构造解。
求字典序最小的话,首先找到第一个顶峰,然后往前找递减的序列中下标较小的,往后就依次找,这样能保证字典序最小。
如何找这个下标较小的呢?显然我们希望每种结尾长度的点都越靠前越好。所以用单调栈维护即可。
最大的话找到最后一个顶峰,往前是依次找,往后是找LIS中下标大的。维护方法类似。
时间复杂度 O(n log n),瓶颈在于求LIS。
CO int N=300000+10;
int a[N],dp[N],up[N],down[N];
int h[N],st[N],ans[N];
void real_main(int n){
fill(dp,dp+n+1,INT_MAX),dp[0]=0;
for(int i=1;i<=n;++i){
read(a[i]);
up[i]=lower_bound(dp+1,dp+n+1,a[i])-dp;
dp[up[i]]=a[i];
}
fill(dp,dp+n+1,INT_MAX),dp[0]=0;
for(int i=n;i;--i){
down[i]=lower_bound(dp+1,dp+n+1,a[i])-dp;
dp[down[i]]=a[i];
}
// minimum lexicographic order
int tot=0;
int peak=1,height=up[1]+down[1];
for(int i=2;i<=n;++i)
if(up[i]+down[i]>height) peak=i,height=up[i]+down[i];
int top=0;
h[up[peak]]=a[peak];
for(int i=peak-1;i;--i){
if(a[i]>=h[up[i]+1]) continue;
while(top and up[i]>=up[st[top]]) --top;
st[++top]=i;
h[up[i]]=a[i];
}
for(;top;--top) ans[++tot]=st[top];
ans[++tot]=peak;
for(int i=peak+1;i<=n;++i)
if(down[i]==down[ans[tot]]-1 and a[i]<a[ans[tot]]) ans[++tot]=i;
for(int i=1;i<=tot;++i) printf("%d%c",ans[i]," \n"[i==tot]);
// maximum lexcographic order
tot=0;
peak=1,height=up[1]+down[1];
for(int i=2;i<=n;++i)
if(up[i]+down[i]>=height) peak=i,height=up[i]+down[i];
top=0;
st[++top]=peak;
for(int i=peak-1;i;--i)
if(up[i]==up[st[top]]-1 and a[i]<a[st[top]]) st[++top]=i;
for(;top;--top) ans[++tot]=st[top];
h[down[peak]]=a[peak];
for(int i=peak+1;i<=n;++i){
if(a[i]>=h[down[i]+1]) continue;
while(tot and down[i]>=down[ans[tot]]) --tot;
ans[++tot]=i;
h[down[i]]=a[i];
}
for(int i=1;i<=tot;++i) printf("%d%c",ans[i]," \n"[i==tot]);
}
int main(){
for(int n;~scanf("%d",&n);) real_main(n);
return 0;
}
HDU什么时候开始支持<bits/stdc++.h>了……
HDU6592 Beauty Of Unimodal Sequence的更多相关文章
- 2019年杭电多校第二场 1002题Beauty Of Unimodal Sequence(LIS+单调栈)
题目链接 传送门 思路 首先我们对\(a\)正反各跑一边\(LIS\),记录每个位置在前一半的\(LIS\)中应该放的位置\(ans1[i]\),后一半的位置\(ans2[i]\). 对于字典序最小的 ...
- 2019DX#2
Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 Another Chess Problem 8.33%(1/12) 1002 Beau ...
- 2019 Multi-University Training Contest 2
2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...
- hdu-5496 Beauty of Sequence(递推)
题目链接: Beauty of Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java ...
- HDU 5496 Beauty of Sequence
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5496 Beauty of Sequence Problem Description Sequence ...
- HDU 5496——Beauty of Sequence——————【考虑局部】
Beauty of Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- hdu5496 Beauty of Sequence
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods
http://codeforces.com/problemset/problem/351/D 题意: n个数的一个序列,m个操作 给出操作区间[l,r], 首先可以删除下标为等差数列且数值相等的一些数 ...
- SoundHound Inc. Programming Contest 2018
A - F Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement You are give ...
随机推荐
- 【免费视频】使用VS Code开发ASP.NET Core WebAPI应用程序
1.使用VS Code开发ASP.NET Core WebAPI应用程序 1.使用Visual Studio Code开发Asp.Net Core基础入门实战 毕竟从.net过度过来的我们已经习惯了使 ...
- c# 大白话告诉你Thread的Sleep和Join的区别
我们的程序默认会有两个线程,一个是主线程,一个是负责垃圾回收的线程.如果代码不使用多线程,就只有主线程这一条干道.1.在主线程中调用Thread.Sleep(1000),表示主线程阻塞自己1秒.2.在 ...
- 本周使用angular7所遇到的一些问题
前言 本周在使用angular7所遇到的一些问题,学习是不断的循序渐进的过程,在本周完成对应的工作后,也要抽出一些时间用来学习,比较我们公司10点上班,我一般9点就会到,在这一个小时内看看博客,写写笔 ...
- FPGA+ADV7511实现HDMI显示
一.前言 目前FPGA成为了视频图像实时处理的主要平台.显示作为图像应用设备的必要功能,对整体系统处理效果非常关键.HDMI是现阶段主流的显示接口,本文基于ADV7511芯片的HDMI显示系统,讲述H ...
- (一)pdf的数据类型
引自:https://blog.csdn.net/steve_cui/article/details/81912528 pdf的数据类型主要由8种 boolean(布尔型) :关键字为“ ...
- C#读写修改设置调整UVC摄像头画面-伽玛
有时,我们需要在C#代码中对摄像头的伽玛进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
- 2019 美团java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美团等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美团,入职一年时间了,也成为了面试官,之 ...
- Spring Security 解析(七) —— Spring Security Oauth2 源码解析
Spring Security 解析(七) -- Spring Security Oauth2 源码解析 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因 ...
- Java自学-日期 Date
Java的日期类Date Date类 注意:是java.util.Date; 而非 java.sql.Date,此类是给数据库访问的时候使用的 示例 1 : 时间原点概念 所有的数据类型,无论是整数, ...
- Devops K8s
公司在组建Devops团队,base在上海 徐家汇.具体职位有Devops工程师和K8s工程师. 有意者请私信.