51nod 1153 选择子序列
这道题是\(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;
}
51nod 1153 选择子序列的更多相关文章
- 51nod 1202 不同子序列个数 [计数DP]
1202 子序列个数 题目来源: 福州大学 OJ 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 子序列的定义:对于一个序列a=a[1],a[2],.. ...
- 51nod 1202 不同子序列个数(计数DP)
1202 子序列个数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 子序列的定义:对于一个序列a=a[1],a[2],......a[n].则非空序列a'=a[p1],a ...
- 51nod——2504 是子序列的个数(一看就会的序列自动机原理)
还以为序列自动机是什么,写完无意间看到帖子原来这就是序列自动机……这算自己发现算法
- BZOJ4553: [Tjoi2016&Heoi2016]序列
Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所 ...
- BZOJ 4553 Tjoi2016&Heoi2016 序列
Tjoi2016&Heoi2016序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最 ...
- XIII Open Grodno SU Championship
A. Alice in the Wonderland 按题意模拟. #include<stdio.h> #include<iostream> #include<strin ...
- HEOI2016解题报告
树 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记 ...
- 【BZOJ4553】【TJOI2016】【HEOI2016】序列
cdq和整体二分之间的关系好迷啊 原题: 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛 ...
- MIT molecular Biology 笔记8 RNA剪接
视频 https://www.bilibili.com/video/av7973580/ 教材 Molecular biology of the gene 7th edition J.D. Wat ...
- IRanges package
1)介绍 在分析序列时,我们通常对特定的连续子序列感兴趣. 例如,a矢量可以被认为是按字母顺序排列的小写字母序列. 我们将第一个五个字母(a到e)称为连续的子序列,而仅包含元音的子序列不会是连续的. ...
随机推荐
- Spring Boot中编写单元测试
编写单元测试可以帮助开发人员编写高质量的代码,提升代码质量,减少Bug,便于重构.Spring Boot提供了一些实用程序和注解,用来帮助我们测试应用程序,在Spring Boot中开启单元测试只需引 ...
- 【omr】linux配置omr识别项目moonlight环境
最近又做了第n次moonlight的环境配置 moonlight是相对成熟的omr系统 这里记录环境配置的基本步骤 (总的来说主要是用conda新建符合程序要求的python版本 然后装好bazel和 ...
- 利用fread读取二进制文件的bug
最近在做一个项目时需要读取二进制文件,我用C语言的fread进行读取,代码如下: FILE *fp; int read_data; fopen_s(&fp, file_path, " ...
- shell编程【一】
参考网址:[Linux命令大全][]:https://linux265.com/course/linux-commands.html 为什么要学习shell指令? 学习shell指令的本身也是在了解L ...
- DHCP分配IP的流程
1.DHCP客户端以广播的形式发送DHCP Discover报文 2.所有的DHCP服务端都可以接收到这个DHCP Discover报文,所有的DHCP服务端都会给出响应,向DCHP客户端发送一个DH ...
- 117、商城业务---分布式事务---RabbitMQ延时队列
1.定时任务存在的问题 即任务过期时间为30min,任务在第31min过期,但是在第60分钟才被扫描到 2.延时队列 是先设置一个过期队列,里面消息过期后不会丢弃而是通过交换机放到另一个队列中.从这个 ...
- 智汇成城 ,创赢未来 | AI+产业峰会智慧城市专场在深成功举办!
11月4日下午,由福田区人才工作局指导,广州英码信息科技有限公司和共达地创新技术(深圳)有限公司联合主办,深圳市人工智能行业协会承办的AI+产业峰会之智慧城市专场活动在深圳市南山区成功举办. &quo ...
- [Unity基础]碰撞和触发
参考链接: https://www.cnblogs.com/hont/p/4472326.html 碰撞关系表: https://docs.unity3d.com/Manual/CollidersOv ...
- Docker安装:Centos7.6安装Docker
Docker03:Centos7.6安装Docker 前提条件 内核版本 更新yum 包 卸载旧版本(如果安装过旧版本的话) 安装依赖包 设置yum源(阿里云源) 更新缓存 安装容器 启动并加入开机启 ...
- Rosetta scoring
参考:https://www.rosettacommons.org/demos/latest/tutorials/scoring/scoring 介绍 Rosetta有一个被称为ref2015的优化能 ...