hdu 6592 Beauty Of Unimodal Sequence

首先前后各跑一遍LIS ,然后即可找到最长的子序列长度和中间值,对于中间值两边的直接选取和用单调栈来实现字典序

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int inf = 0x3f3f3f3f;ll n,a[300005],pos[300005];
ll dp[300005],ans1[300005],ans2[300005];
stack<ll> st;
vector<ll> vec,v;
int main(){while(scanf("%lld",&n)>0){memset(dp,inf,sizeof(ll)*(n+1));dp[0]=0;for(int i=1;i<=n;i++){scanf("%lld",a+i);pos[i]=inf;ans1[i]=0,ans2[i]=0;ans1[i] = lower_bound(dp+1,dp+n+1,a[i])-dp;dp[ans1[i]]=a[i];}memset(dp,inf,sizeof(ll)*(n+1));dp[0]=0;for(int i=n;i>0;i--){ans2[i] = lower_bound(dp+1,dp+n+1,a[i])-dp;dp[ans2[i]]=a[i];}while(!st.empty()) st.pop();ll mx = ans1[1]+ans2[1],idx=1;//字典序最小   ans1[1]为1  ans2[1]为a[1]右边比a[1]大的数的个数  mx即为最长子序列的长度 for(int i=2;i<=n;i++){if(ans1[i]+ans2[i]>mx){mx = ans1[i]+ans2[i];idx = i;}}pos[ans1[idx]]=a[idx]; //找到序列中最大的值 至pos中  for(int i=idx-1;i>=1;i--){if(ans1[i] > ans1[idx] ) continue;if( a[i] >= pos[ans1[i]+1] ) continue;//找到最小序列    while(!st.empty()&& ans1[i] >= ans1[st.top()]){st.pop();}st.push(i);//将符合条件的存入栈中 pos[ans1[i]] = a[i];} v.clear();while(!st.empty()){v.push_back(st.top());st.pop();}v.push_back(idx);int x=idx;for(int i=idx+1;i<=n;i++){//将idx后的lis序列恰好大于1 存入其下标 ,即为字典去最小 if(ans2[x] == ans2[i] + 1  /*&& a[i] < a[x] */){v.push_back(i);x=i;}}for(int i=0;i<v.size();i++){i==0? (cout << v[i] ) : (cout << " " <<v[i]) ;}cout << endl;//字典序最大 v.clear();while(!st.empty()) st.pop();mx=ans1[1]+ans2[1];  idx=1;for(int i=2;i<=n;i++){if(ans1[i]+ans2[i]>=mx){mx = ans1[i]+ans2[i];idx = i;}}x=idx;v.push_back(idx);for(int i=idx-1;i>=1;i--){if(ans1[x] == ans1[i]+1  ){v.push_back(i);x=i;}}reverse(v.begin() , v.end());int flag=0;for(int i=0;i<v.size();i++){if(flag) cout << " ";flag=1;cout << v[i] ;}memset(pos,inf,sizeof(ll)*(n+1));pos[ans2[idx]]=a[idx];for(int i=idx+1;i<=n;i++){if(ans2[i] > ans2[idx] ) continue;if( a[i] > pos[ans2[i]+1] ) continue;while(!st.empty()&& ans2[i] >= ans2[st.top()]){st.pop();}st.push(i);pos[ans2[i]] = a[i];} v.clear();while(!st.empty()) {v.push_back(st.top());st.pop();}reverse(v.begin(),v.end());for(int i=0;i<v.size();i++){if(flag) cout << " ";flag=1;cout << v[i] ;}cout << endl;}
} 

hdu 6592 Beauty Of Unimodal Sequence相关推荐

  1. Beauty Of Unimodal Sequence(HDU-6592)

    Problem Description You are given an array of n integers a1,a2,...,an. We define that a sequence p1, ...

  2. 2019HDU多校补题

    心得:做不出,补不动 HUD第一场: 1001 Blank Y 1002 Operation Y 1003 Milk 1004 Vication Y 1005 Path Y 1006 Typewrit ...

  3. 线性结构 —— 单调栈与单调队列

    [单调栈] 1.原理 单调栈,就是栈内元素保持一定单调性(单调递增或单调递减)的栈,即从栈底到栈顶单调递增或递减. 对于单调递增的栈,如果栈为空或入栈元素值大于等于栈顶元素值,则入栈:否则,若入栈会破 ...

  4. 20190724杭电多校第二场

    没有补题..倒是又想到了1002的二分做法,比原来好写了不少,也快了不少. #include<bits/stdc++.h> using namespace std; #define p_b ...

  5. 杭电多校(二)2019.7.24--暑假集训

    [HDU 6591] UNSOLVED [HDU 6592] UNSOLVED [HDU 6593] UNSOLVED [HDU 6594] UNSOLVED [HDU 6595] SOLED 概率期 ...

  6. android电脑文件列表不刷新,Android 利用RecyclerView.Adapter刷新列表中的单个view问题...

    首先使用RecyclerView的adapter继承:RecyclerView.Adapter public class OrderListAdapter extends RecyclerView.A ...

  7. keil c语言编译运行,Keil的c语言编译器

    我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论. (1)全局变量:如果程序中定义了全局变量,而且初始值不是0.此时,在程序调到main()函数执行前,除了要进 ...

  8. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

  9. 【HDU】1005 Number Sequence (有点可爱)

    http://acm.hdu.edu.cn/showproblem.php?pid=1005 A number sequence is defined as follows: f(1) = 1, f( ...

  10. hdu 5273 Dylans loves sequence 逆序数简单递推

    Dylans loves sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...

最新文章

  1. 禁用GPU版本TensorFlow,切换到CPU版本TensorFlow。
  2. 获取保存在沙盒中plist文件的用户的字典信息
  3. php 无法输出图像,ThinkPHP里无法输出图片 设置响应头
  4. st 串口烧写工具 芯片_STM32芯片的几种烧写方式简介
  5. 故障解决:没有未桥接的主机网络适配器
  6. 利用OpenCvSharp处理图片并在winformd的pictureBox中显示
  7. Asp.Net Core 中IdentityServer4 实战之 Claim详解
  8. 启动不起来_国产开源工具:U盘启动工具Ventoy v1.0.29发布——墨涩网
  9. 我来谈谈小程序和工作方向
  10. (转)淘淘商城系列——zookeeper单机版安装
  11. @程序员,CSDN卫衣、背包、鼠标垫......福利来啦!!!
  12. 科大讯飞独家Founding赞助国际语音顶会,14篇论文被收录
  13. python核心编程之Python聚类算法之凝聚层次聚类实例分析
  14. 乱OL, Ran OL[Ran2_Online]加解密工具源码
  15. 计算机与现代社会英语作文,高一英语作文,科技以下是题目:众所周知,科技在现代社会和生活中扮演着越来越重要的角色,但科技同时也是一把双刃剑,在它璀璨...
  16. 动态规划-击爆气球 Burst Balloons
  17. QN-H618 遥控器复制再生仪(拷贝机)
  18. 解决win10系统点击飞行模式后找不到WiFi连接问题
  19. 转载:使用pythonr脚本实现微信公众号音频批量下载
  20. 由中序后序序列求前序序列

热门文章

  1. 2014十佳IDC评选-专访联动天下CEO饶华明
  2. 慕课软件工程(第五章.初始模块结构图精化的原则)
  3. win10在哪打开ie浏览器?windows11怎么打开ie浏览器?
  4. CT重建-X射线断层成像仿真实验
  5. Android简易天气App
  6. 苹果M1如何安装Rosetta
  7. mysql 2000_sql server 2000 下载
  8. CentOS7修改主机名称(hostname)总是不成功的原因及解决办法
  9. 遇见心想事成的自己……
  10. linux下raid0创建教程,Linux 常见 RAID 及软 RAID 创建