HDU 6592 (LIS+输出字典序最大最小)
题意:给你一个序列,让你找长度最长的字典序最小和最大的单峰序列,单峰序列就是满足先增后降的序列。
思路:先正着求一遍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+输出字典序最大最小)的更多相关文章
- HDU 1385 Minimum Transport Cost (输出字典序最小路径)【最短路】
<题目链接> 题目大意:给你一张图,有n个点,每个点都有需要缴的税,两个直接相连点之间的道路也有需要花费的费用.现在进行多次询问,给定起点和终点,输出给定起点和终点之间最少花费是多少,并且 ...
- hdu 1814 2-sat 输出字典最小的和任意序列的 模板题
/* 思路:http://blog.csdn.net/string_yi/article/details/12686873 hdu 1814 输出字典序最小的2-sat */ #include< ...
- Peaceful Commission HDU - 1814(输出最小的一组解)
Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条件: ...
- [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...
- [leetcode](4.21)2. 按字典序排列最小的等效字符串
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...
- HDU 5224 Tom and paper(最小周长)
HDU 5224 Tom and paper(最小周长) Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d &a ...
- hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)
Peaceful Commission Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- ZOJ-1456 Minimum Transport Cost---Floyd变形+路径输出字典序最小
题目链接: https://vjudge.net/problem/ZOJ-1456 题目大意: Spring国家有N个城市,每队城市之间也许有运输路线,也可能没有.现在有一些货物要从一个城市运到另一个 ...
- poj 1041(欧拉回路+输出字典序最小路径)
题目链接:http://poj.org/problem?id=1041 思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路.一个无向图存 ...
随机推荐
- jmeter应用之批量插入数据
上一篇讲到如何在jmeter中配置并连接使用mysql数据库,这一节主要是讲数据库连接的简单应用——批量插入数据 总体步骤如下: 1)新建线程组和添加JDBC Connection Configura ...
- Mysql常用时间函数的用法和应用
/* ---1)整型时间戳转换为date的格式(yyyymmdd, yyyy年mm月dd)--*/ , '%Y%m%d' ); -- 20090806 , '%Y年%m月%d' ); -- 2009年 ...
- python3—廖雪峰之练习(二)
函数的参数练习 请定义一个函数quadratic(a, b, c), 接收3个参数,返回一元二次方程 : $ ax^2+b+c=0 $ 的两个解 提示:计算平方根可以调用math.sqrt()函数: ...
- 嗨翻C语言--这里没有蠢问题(一)
问:card_name[0]是什么意思?答:它是用户输入的第一个字符.如果用户输入了10,那么card_name[0]就将是1.问:总是得用/*和*/写注释吗?答:如果你的编译器支持C99标准,就可以 ...
- 偶遇com组件 .rc 文件 not found .tlb文件问题:
好久木有弄com组件来,记忆已经模糊了,今天遇见一个编译问题,折腾了半天,mark一下: xxx_x64.rc(273): error RC2135: file not found: xxx.tlb ...
- php 操作Redis发送短信
循环查询redis队列里面的数据 然后提交数据后将反馈信息再写入另一个 redis list里面 代码 <?php /** * System Name: sent message * User: ...
- linux中忘记mysql用户root密码解决方案
1.vim /etc/my.cnf[mysqld]skip-grant-tables ##追加此行,跳过权限表, 2.重启mysqlsystemctl restart mysqld 3.mysql 登 ...
- PHP 如何实现页面静态化
页面静态化分为两种 一种伪静态,即url重写,一种纯静态化. 一.静态化的优点: 1有利于搜索引擎收录网站页面的信息:搜索引擎更喜欢静态的,更变于抓取,搜索引擎SEO排名会更容易提高. 2静态网页化网 ...
- Sublime Text 3 安装及汉化操作
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写检查,书签,完整的 ...
- Delphi主消息循环研究(Application.Run和Application.Initialize执行后的情况)
Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; 第一步,貌似什么都不做,但如果提前定义I ...