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;
}

51nod 1153 选择子序列的更多相关文章

  1. 51nod 1202 不同子序列个数 [计数DP]

    1202 子序列个数 题目来源: 福州大学 OJ 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 子序列的定义:对于一个序列a=a[1],a[2],.. ...

  2. 51nod 1202 不同子序列个数(计数DP)

    1202 子序列个数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40      子序列的定义:对于一个序列a=a[1],a[2],......a[n].则非空序列a'=a[p1],a ...

  3. 51nod——2504 是子序列的个数(一看就会的序列自动机原理)

    还以为序列自动机是什么,写完无意间看到帖子原来这就是序列自动机……这算自己发现算法

  4. BZOJ4553: [Tjoi2016&Heoi2016]序列

    Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所 ...

  5. BZOJ 4553 Tjoi2016&Heoi2016 序列

    Tjoi2016&Heoi2016序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最 ...

  6. XIII Open Grodno SU Championship

    A. Alice in the Wonderland 按题意模拟. #include<stdio.h> #include<iostream> #include<strin ...

  7. HEOI2016解题报告

    树 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记 ...

  8. 【BZOJ4553】【TJOI2016】【HEOI2016】序列

    cdq和整体二分之间的关系好迷啊 原题: 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛 ...

  9. MIT molecular Biology 笔记8 RNA剪接

    视频  https://www.bilibili.com/video/av7973580/ 教材 Molecular biology of the gene 7th edition  J.D. Wat ...

  10. IRanges package

    1)介绍 在分析序列时,我们通常对特定的连续子序列感兴趣. 例如,a矢量可以被认为是按字母顺序排列的小写字母序列. 我们将第一个五个字母(a到e)称为连续的子序列,而仅包含元音的子序列不会是连续的. ...

随机推荐

  1. js-classList用法学习记录1

    classList introduction: 学习后我的个人理解是,在给html中创建的类一系列操作的方法调用. detailed method: 网站具体介绍(菜鸟) add:添加类,已有则不添加 ...

  2. 2月27日Android开发学习

    App工程目录结构 App工程分为两个层次,第一个层次是项目,另一个层次是模块. 模块依附于项目,每个项目至少有一个模块.一般而言的"编译运行App",指的是运行某一模块,而非运行 ...

  3. 说一说webpack的配置文件

    可能有一些友友会奇怪为什么在写webpack的配置文件的时候,我们只能用commonJS导出. 原因:在打包的时候需要运行webpack的配置文件里面的代码,而webpack在打包运行的环境在node ...

  4. Spring Boot中开启Spring Security

    Spring Boot中开启Spring Security Spring Security是一款基于Spring的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架Apache Shi ...

  5. 关于lesscss和颜色梯度(linear-gradient )的一些问题

    一.什么是less? 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, F ...

  6. nodejs 利用URL和querystring获取get查询参数

    为深入理解request的get url信息及参数传递,利用URL和querystring获取对应的信息,测试成功,记录如下: 1.编写server.js文件 http=require("h ...

  7. OpenJudge2811:熄灯问题(枚举)

    熄灯问题 有一个由按钮组成的矩阵,其中每行有6个按钮,共5行.每个按钮的位置上有一盏灯.当按下一个按钮后,该按钮以及周围位置(上边.下边.左边.右边)的灯都会改变一次.即,如果灯原来是点亮的,就会被熄 ...

  8. vue项目 - 自定义数字输入指令 | 限制自定义小数位输入

    1.在main.js中直接加入代码: import Vue from 'vue' Vue.directive("input-limit", { bind(el, binding) ...

  9. 网络安全(中职组)-B模块:Web安全应用-2

    Web安全应用-2 任务环境说明: √ 服务器场景: match_win03-3-1(关闭链接) √ 服务器场景操作系统:Windows Server 2003 1. 使用渗透机Kali Linux, ...

  10. Java笔记第十三弹

    函数式接口 有且仅有一个抽象方法的接口 适用于Lambda使用的接口 @FunctionalInterface//表示函数式接口 函数式接口作为方法的参数 public class Main{ pub ...