题意:给你一个序列,让你找长度最长的字典序最小和最大的单峰序列,单峰序列就是满足先增后降的序列。

思路:先正着求一遍LIS,再反着求一遍LIS,然后用单调栈来模拟。

求字典序最小的话,首先找到第一个顶峰,然后往前找递减的序列中下标较小的,往后就依次找,这样能保证字典序最小。

最大的话找到最后一个顶峰,往前是依次找,往后是找LIS中下标大的。

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int N = 3e5+;
int d[N],pos1[N],pos2[N],a[N],p[N],ans[N];
int main(){
int n;
while(~scanf("%d",&n)){
for(int i= ; i<=n ; i++)
d[i]=INF,p[i]=INF;
d[]=;
for(int i= ; i<=n ; i++){///正向LIS
scanf("%d",&a[i]);
pos1[i]=lower_bound(d+,d++n,a[i])-d;
d[pos1[i]]=a[i];
}
for(int i= ; i<=n ; i++)
d[i]=INF;
d[]=;
for(int i=n ; i>= ; i--){///反向LIS
pos2[i]=lower_bound(d+,d++n,a[i])-d;
d[pos2[i]]=a[i];
}
int now=,mx=pos1[]+pos2[],tot=;///找到最小秃顶
for(int i= ; i<=n ; i++)
{
if(pos1[i]+pos2[i]>mx){
mx=pos1[i]+pos2[i];
now=i;
}
}
///找字典序最小就是正找小反找大(仔细一想是这么一回事)
stack<int>st;
p[pos1[now]]=a[now];/// pos1[now]--长度的尾巴是a[now]
for(int i=now-;i>=;i--){
if(a[i]>=p[pos1[i]+]) continue;///排除不合格的条件 -> 6 5 (把6排除)
while(!st.empty()&&pos1[st.top()]<=pos1[i]) st.pop(); ///在可选的,选择下标小的
st.push(i);
p[pos1[i]]=a[i];
}
while(!st.empty()){
ans[++tot]=st.top();
st.pop();
}
ans[++tot]=now;
///反向最大就是一直调下去
for(int i=now+ ; i<=n ; i++){
if(pos2[i]==pos2[ans[tot]]-&&a[ans[tot]]>a[i])
ans[++tot]=i;
}
for(int i=;i<tot;i++)
printf("%d ",ans[i]); printf("%d\n",ans[tot]);
now=; mx=pos1[]+pos2[]; tot=;
for(int i=;i<=n;i++){///找到最大秃顶
if(pos1[i]+pos2[i]>=mx){
mx=pos1[i]+pos2[i];
now=i;
}
}
///找字典序最大就是正找大反找小
st.push(now);
for(int i=now-;i>=;i--){
if(pos1[i]==pos1[st.top()]-&&a[i]<a[st.top()]){
st.push(i);
}
}
while(!st.empty()){
ans[++tot]=st.top();st.pop();
} for(int i= ; i<=n ; i++)
p[i]=;
p[pos2[now]]=a[now]; for(int i=now+;i<=n;i++){
if(a[i]>=p[pos2[i]+]) continue;
while(tot>&&pos2[i]>=pos2[ans[tot]]) tot--;
ans[++tot]=i;
p[pos2[i]]=a[i];
}
for(int i=;i<tot;i++)
printf("%d ",ans[i]); printf("%d\n",ans[tot]);
}
return ;
}

HDU 6592 (LIS+输出字典序最大最小)的更多相关文章

  1. HDU 1385 Minimum Transport Cost (输出字典序最小路径)【最短路】

    <题目链接> 题目大意:给你一张图,有n个点,每个点都有需要缴的税,两个直接相连点之间的道路也有需要花费的费用.现在进行多次询问,给定起点和终点,输出给定起点和终点之间最少花费是多少,并且 ...

  2. hdu 1814 2-sat 输出字典最小的和任意序列的 模板题

    /* 思路:http://blog.csdn.net/string_yi/article/details/12686873 hdu 1814 输出字典序最小的2-sat */ #include< ...

  3. Peaceful Commission HDU - 1814(输出最小的一组解)

    Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: ...

  4. [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...

  5. [leetcode](4.21)2. 按字典序排列最小的等效字符串

    给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...

  6. HDU 5224 Tom and paper(最小周长)

    HDU 5224 Tom and paper(最小周长) Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d &a ...

  7. hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)

    Peaceful Commission Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. ZOJ-1456 Minimum Transport Cost---Floyd变形+路径输出字典序最小

    题目链接: https://vjudge.net/problem/ZOJ-1456 题目大意: Spring国家有N个城市,每队城市之间也许有运输路线,也可能没有.现在有一些货物要从一个城市运到另一个 ...

  9. poj 1041(欧拉回路+输出字典序最小路径)

    题目链接:http://poj.org/problem?id=1041 思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路.一个无向图存 ...

随机推荐

  1. .net 与directX

    微软早期出过managed assembly.但后来因为XXX的原因,没有继续出,只支持c++了..net的开发者就哭了.这篇博客解释了前世今生: https://blogs.msdn.microso ...

  2. C++的同名属性(没有虚拟属性)、同名普通函数、同名静态函数(没有虚拟静态函数),是否被覆盖

    例子1:属性的覆盖#include "stdafx.h" class A {public: int i; A() { i=1; }}; class B: public A {pub ...

  3. 3.css3文字与字体

    1.css3文字与字体: ①Font-size:大小. ⑴通常使用px.百分比.em来设置大小: ⑵xx-small.x-small.small.medium.large.x-large.xx-lar ...

  4. 北京太速科技股份有限公司产品手册V201903020

    如果您无法正常查看,请点击在线浏览                                           如果您无法正常查看,请点击在线浏览 了解更多产品信息,请扫描二维码,期待您的关注 ...

  5. 使用modelsim直接仿真IP(FIFO)

      不通过quartus仿真,简单的仿真,就不用建立工程了,直接建立个简单的库 1.改变当前modelsim的工作路径到quartus工程的根目录下 2.新建库 3.添加必要的文件 这里第一个框,要选 ...

  6. 自然语言处理资源NLP

    转自:https://github.com/andrewt3000/DL4NLP Deep Learning for NLP resources State of the art resources ...

  7. eclipse多个项目提交到同一个仓库(码云)

    参考博客:Eclipse提交多个项目到同一个仓库 https://blog.csdn.net/qq_30764991/article/details/80379365 步骤一:码云建立个远程仓库 步骤 ...

  8. spring security基本知识(二) 自定义认证

    配置自定义的用户存储 我们在 SecurityConfig 的配置类中 重写了 configure(AuthenticationManagerBuilder auth) 方法,我们可以通过 Authe ...

  9. vue请求数据

    vue-resource: 推荐教程:https://www.runoob.com/vue2/vuejs-ajax.html 1. 需要安装vue-resource模块, 注意加上 --save np ...

  10. 2.docker基础用法

    一.前言 OCI(Open Container Initiative):由Linux基金会主导于2015年6月创立,OCI定义了容器运行时的标准. OCI有两部分组成: the Runtime Spe ...