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的更多相关文章

  1. 2019年杭电多校第二场 1002题Beauty Of Unimodal Sequence(LIS+单调栈)

    题目链接 传送门 思路 首先我们对\(a\)正反各跑一边\(LIS\),记录每个位置在前一半的\(LIS\)中应该放的位置\(ans1[i]\),后一半的位置\(ans2[i]\). 对于字典序最小的 ...

  2. 2019DX#2

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 Another Chess Problem 8.33%(1/12)   1002 Beau ...

  3. 2019 Multi-University Training Contest 2

    2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...

  4. hdu-5496 Beauty of Sequence(递推)

    题目链接: Beauty of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  5. HDU 5496 Beauty of Sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5496 Beauty of Sequence Problem Description Sequence ...

  6. HDU 5496——Beauty of Sequence——————【考虑局部】

    Beauty of Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  7. hdu5496 Beauty of Sequence

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  8. CF&&CC百套计划3 Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods

    http://codeforces.com/problemset/problem/351/D 题意: n个数的一个序列,m个操作 给出操作区间[l,r], 首先可以删除下标为等差数列且数值相等的一些数 ...

  9. SoundHound Inc. Programming Contest 2018

    A - F Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement You are give ...

随机推荐

  1. 通过inspect在电脑的Chrome上查看手机上的H5

    首先打开手机的开发者模式,(在连续点击7次版本号,系统会提示已经打开开发者模式) 然后打开一个手机浏览器. 然后在电脑上打开chrome://inspect/#devices.这是就会出现手机上浏览器 ...

  2. 关于ThinkPHP独立分组的一些使用注意事项

    关于ThinkPHP的独立分组,功能看上去挺好的,可是官方并没有给出详细的例子和说明,在此,根据实际的开发过程,给予各位php开发人员以下几点说明: 1.独立分组的目录结构 和官方说明一样,建立Mod ...

  3. 发现一个企业微信第三方应用开发的疑似BUG

    1.企业微信两个账号A(超级管理员),账号B(分级管理员),账号B具有创建应用与小程序权限.2.账号B添加一个第三方应用后(创建后能看到第三方应用),使用下图接口登录时回调的agent一直为空,3.超 ...

  4. 在 Docker 中运行 SpringBoot 应用

    创建 SpringBoot 项目 用 Idea 创建一个 SpringBoot 项目,编写一个接口: package cloud.dockerdemo import org.springframewo ...

  5. .NET / C# 时间与时间戳的转换

    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数. 我们在计算时间戳时应为1970年01月01日到指定时间. 应当注 ...

  6. C#文件操作之把一个文件复制到另外一个文件夹下

    一.文件复制例子如下,具体情况,根据需求扩展. /// <summary> /// /// </summary> /// <param name="srcFol ...

  7. Django---Django的中间件

    Django---Django的中间件 一丶中间件介绍 什么是中间件 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Dj ...

  8. 【数据库-MySql】开启事件 event_scheduler

    Navicat Premium 事件计划已关闭.事件只能在服务器启动并开启事件计划时才能处理. Navicat for MySQL The event_scheduler is Off. Events ...

  9. PostgreSQL 基本数据类型及常用SQL 函数操作

    数据类型 名字 别名 描述 bigint int8 有符号的8字节整数 bigserial serial8 自动增长的8字节整数 bit [ (n) ]   定长位串 bit varying [ (n ...

  10. linux shell的输出效果

    在linux系统命令行界面默认目录颜色是蓝色,在黑色底色上无法看清 原来效果图: 最终效果图: 大致步骤:1.复制配置文件到个人用户的根目录下2.修改配置文件中字体颜色的设置3.重新启动窗口,输入ls ...