Jzoj3467 最长上升子序列
维护一个序列,使它可以进行下面两种操作:
1.在末尾添加一个数字x
2.将整个序列变成第x次操作后的样子
在每次操作后,输出当前序列的最长上升子序列的长度
序列初始时为空
嗯,可持久化线段树的裸题
额这可是noip提高组难度的题,我们发现所有操作可以变成一棵树(离线做法老套路了)
让后每次最多修改数组上的一个值(考虑二分求LIS的过程)最后改回去就好了
注意dfs又卡栈(jzoj极不良心啊)
#pragma GCC opitmize("O3")
#pragma G++ opitmize("O3")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define N 500010
#define INF 0x7fffffff
using namespace std;
extern int main2(void) __asm__ ("main2");
struct edge{ int v,c,nt; } G[N];
int h[N],f[N],n,cnt=0,A[N];
inline void adj(int x,int y,int c){G[++cnt]=(edge){y,c,h[x]}; h[x]=cnt;
}
void dfs(int x){A[x]=lower_bound(f,f+n,INF)-f;for(int p,v,i=h[x];i;i=G[i].nt){p=lower_bound(f,f+n,G[i].c)-f;v=f[p]; f[p]=G[i].c; dfs(G[i].v); f[p]=v;}
}
int main2(){freopen("lis.in","r",stdin);freopen("lis.out","w",stdout); scanf("%d",&n); *f=INF;for(int o,x,i=1;i<=n;++i){scanf("%d%d",&o,&x); f[i]=INF;if(o) adj(x,i,INF); else adj(i-1,i,x);}dfs(0);for(int i=1;i<=n;++i) printf("%d\n",A[i]); exit(0);
}
int main(){ int size=32<<20; char *p=(char*)malloc(size)+size; __asm__ __volatile__("movq %0, %%rsp\n" "pushq $exit\n" "jmp main2\n" :: "r"(p));
}
转载于:https://www.cnblogs.com/Extended-Ash/p/9477190.html
Jzoj3467 最长上升子序列相关推荐
- 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...
问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...
- 最长连续子序列nlogn算法
最长上升子序列(LIS)长度的O(nlogn)算法 标签: 算法search优化存储 2012-04-18 19:38 14031人阅读 评论(5) 收藏 举报 分类: 资料学习(15) 解题报告 ...
- leetcode-300 最长上升子序列
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...
- 【动态规划】最长公共子序列与最长公共子串
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- POJ 3080 多个串最长公共子序列
求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...
- java实现最长连续子序列_最长公共子序列 ||
问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...
- 动态规划——最长上升子序列问题 两种角度及优化算法
最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...
- 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence
动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...
- 最长递增子序列的两种解法
以LeetCode-300为例: O(n^2)解法: dp数组表示以i结尾的最长递增子序列的长度 class Solution { public:int lengthOfLIS(vector<i ...
- 触类旁通,经典面试题最长公共子序列应该这么答
作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...
最新文章
- 数学是什么?_题跋—数学是什么?
- 关于用飞信框架运行net程序-用批处理运行
- [ruby on rails] 跟我学之(6)显示指定数据
- java 正则 小数_详解Java判断是否是整数,小数或实数的正则表达式
- 工业控制系统专业术语(不断完善中)
- 计算机中函数counta表示,excel中counta函数的使用方法
- C#LeetCode刷题-拓扑排序
- 附加一个:为什么要用简单工厂模式
- python把模块装到文件夹中_把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案...
- Linux服务器安全防护十个方面
- 刚装的fedora16测试时出现莫名包
- map函数的用法python,详解Python map函数及Python map()函数的用法
- Java接口的实现源代码_Comparable接口的实现:源代码
- 运算符和结合性(转)
- CSS控制文本超出指定宽度显示省略号和文本不换行
- Raki的统计学习方法笔记0xF(15)章:奇异值分解
- Shell脚本实现判断一个数是否为质数
- excel工作簿合并怎么处理?
- Ubuntu16.04下用umake安装vscode
- glassfish配置Oracle数据源,GlassFish链接数据库