51nod 1153 选择子序列
51nod 选择子序列
这道题是\(Bunny\)学长在给我们的模拟赛中的一道题。
食用单调栈,处理每个数\(a_i\)左右第一个比自己大的数的下标\(left_i\),\(right_i\),并且建两条有向边\((i,left_i)\),\((i,right_i)\)。处理完毕后得到一个\(DAG\)。
然后求此图的拓扑序。由于都是小数连大数,所以可以以\(a_i\)的值为关键字排序,\(sort\)后即得到此\(DAG\)的一个拓扑序。
求得拓扑序后,即可\(O(n)\) \(DP\) 求\(DAG\)最长链。最长链即为\(ans\)。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#define MAXN 100233
using namespace std;
struct qmq
{int id,x;
}a[MAXN];
int n;
struct qwq
{int id,x;
};
stack<qwq> x,y;
int l[MAXN],r[MAXN];
struct qvq
{int nex,to;
}e[MAXN<<1];
int tot=0,h[MAXN]={};
int f[MAXN];
inline void add(int u,int v)
{
// printf("Edge:::%d %d\n",u,v);e[++tot].to=v;e[tot].nex=h[u];h[u]=tot;
}
bool cmp(qmq o,qmq t)
{return o.x<t.x;
}
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d",&a[i].x);a[i].id=i;}for (int i=1;i<=n;i++){while (!x.empty()&&x.top().x<=a[i].x){if (x.top().x==a[i].x){r[x.top().id]=0;x.pop();continue;}r[x.top().id]=i;x.pop();}x.push((qwq){i,a[i].x});}for (int i=n;i;i--){while (!y.empty()&&y.top().x<=a[i].x){if (y.top().x==a[i].x){l[y.top().id]=0;y.pop();continue;}l[y.top().id]=i;y.pop();}y.push((qwq){i,a[i].x});}for (int i=1;i<=n;i++){if (r[i]) add(i,r[i]);if (l[i]) add(i,l[i]);}sort(a+1,a+n+1,cmp);for (int i=1;i<=n;i++){
// printf(":::::::::::::::%d\n",a[i].id);f[a[i].id]=max(f[a[i].id],1);for (int j=h[a[i].id];j;j=e[j].nex){f[e[j].to]=max(f[e[j].to],f[a[i].id]+1);}}int ans=-233333;for (int i=1;i<=n;i++){ans=max(ans,f[i]);}printf("%d",ans);return 0;
}
转载于:https://www.cnblogs.com/Kan-kiz/p/11310225.html
51nod 1153 选择子序列相关推荐
- [BZOJ4553][TJOI2016HEOI2016]序列(CDQ分治)
4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1202 Solved: 554 [ ...
- XIII Open Grodno SU Championship
A. Alice in the Wonderland 按题意模拟. #include<stdio.h> #include<iostream> #include<strin ...
- BZOJ 4553: [Tjoi2016Heoi2016]序列
#Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了 ...
- C++数据结构与算法 动态规划
动态规划: 和贪婪算法一样,动态规划对一个问题的解是一系列的决策过程,贪婪算法依据贪婪准则,做出的每一个抉择都是不可撤回的,在动态规划中,需要考察一系列抉择,已确定一个最优抉择序列是否包含一个最优抉择 ...
- 五大常用算法一(回溯,随机化,动态规划)
五大常用算法一(回溯,随机化,动态规划) 回溯算法 回溯法: 也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题 ...
- Dilworth定理
Dilworth定理优化"序列的不下降子序列最少划分数" 应kAc的要求,写这篇文章.虽然告别竞赛了,但是帮助晚辈,特别是有可能成为我孙子的人,还是十分有意义的. 首先是定义. 偏 ...
- 内部排序算法全面总结
排序的概念 排序,就是重新排列表中的元素,使表中的元素按照关键字有序的过程. 我所了解的 表 多半是顺序表,因为顺序表实现较为简单,但是链表结构同样可以实现很多排序算法. 定义中的元素一般指什么元素呢 ...
- C. Obtain The String(二分)
Problem - 1295C - Codeforces 给你两个由小写拉丁字母组成的字符串s和t.此外,你还有一个最初为空的字符串z.你想让字符串z等于字符串t,你可以通过以下操作来实现:将s的任何 ...
- 涂鸦移动2021校招软件工程师测试题
博主于2020.9.13日参加了涂鸦移动软件工程师的笔试,奈何实力不够,只解出了一道题,这些题网络上并没有原题,剩余两道我也会放上来(大佬们做出来可以放在评论区,或联系我注明版权放在博客中)与大家分享 ...
最新文章
- Ckeditor通过Ajax更新数据
- Promise--感性认知
- 浏览器打开位置服务器,如何启动http服务器,然后打开web浏览器?
- oracle+查询主机地址,oracle函数:获取Internet主机名和ip地址
- 解决SQLServer事物日志过大的方法
- [爬虫练习]爬取同程安全应急响应公开漏洞列表以及详情
- php银行卡三要素实名认证
- 护照扫描仪的应用环境解读 SDK数据
- 【网络工程】交换机各层作用,100路监控摄像是否_该采用核心交换机吗
- OpenGL PowerVR SDK 编译:Could NOT find X11 (missing: X11_X11_INCLUDE_PATH X11_X11_LIB)
- 免费开源的api接口管理系统,移动时代首选接口管理平台-doclever
- Linux笔记之Debian 11(bullseye) 配置国内源
- 微信订阅号开发学习Wod
- python数据类型怎么打开_python数据类型详解
- 食物同时食用是否有害健康
- Android第一行代码-Fragment
- PostgreSQL 操作
- 高等代数 矩阵的运算(第4章)1 加法,数量乘法,矩阵乘法,一些特殊矩阵
- flash flash页面的的全屏展示
- 《缠中说禅108课》20:缠中说禅走势中枢级别扩张及第三类买卖点
热门文章
- 小程序支付的流程是什么?用户看到的一小步,其实是后台操作的一系列复杂流程
- Python3 Wgs84\gcj02\bd09\mercator\bd09mc坐标系转换与投影
- web crawler 抓某前程的小小tips(低调发育)
- 第一次写博客-C/C++软件开发工程师需要学习哪些东西?
- Java项目ssm企业工资管理系统源码
- 中国大学排名python爬虫_Python爬虫入门实例三之爬取软科中国大学排名
- 设计模式(二)The Observer Pattern(观察者模式)
- VHDL语言基础-数据类型及运算符
- 成都5日--成都-都江堰-青城山-西岭雪山1116
- 作业一:按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。