维护一个序列,使它可以进行下面两种操作:
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 最长上升子序列相关推荐

  1. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  2. 最长连续子序列nlogn算法

    最长上升子序列(LIS)长度的O(nlogn)算法 标签: 算法search优化存储 2012-04-18 19:38 14031人阅读 评论(5) 收藏 举报  分类: 资料学习(15)  解题报告 ...

  3. leetcode-300 最长上升子序列

    题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...

  4. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  5. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  6. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

  7. 动态规划——最长上升子序列问题 两种角度及优化算法

    最长上升子序列 OpenJ_Bailian - 2757 一个数的序列 bi,当 b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( a1, a ...

  8. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

  9. 最长递增子序列的两种解法

    以LeetCode-300为例: O(n^2)解法: dp数组表示以i结尾的最长递增子序列的长度 class Solution { public:int lengthOfLIS(vector<i ...

  10. 触类旁通,经典面试题最长公共子序列应该这么答

    作者 |  labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...

最新文章

  1. 数学是什么?_题跋—数学是什么?
  2. 关于用飞信框架运行net程序-用批处理运行
  3. [ruby on rails] 跟我学之(6)显示指定数据
  4. java 正则 小数_详解Java判断是否是整数,小数或实数的正则表达式
  5. 工业控制系统专业术语(不断完善中)
  6. 计算机中函数counta表示,excel中counta函数的使用方法
  7. C#LeetCode刷题-拓扑排序
  8. 附加一个:为什么要用简单工厂模式
  9. python把模块装到文件夹中_把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案...
  10. Linux服务器安全防护十个方面
  11. 刚装的fedora16测试时出现莫名包
  12. map函数的用法python,详解Python map函数及Python map()函数的用法
  13. Java接口的实现源代码_Comparable接口的实现:源代码
  14. 运算符和结合性(转)
  15. CSS控制文本超出指定宽度显示省略号和文本不换行
  16. Raki的统计学习方法笔记0xF(15)章:奇异值分解
  17. Shell脚本实现判断一个数是否为质数
  18. excel工作簿合并怎么处理?
  19. Ubuntu16.04下用umake安装vscode
  20. glassfish配置Oracle数据源,GlassFish链接数据库

热门文章

  1. 对语音通话占用带宽的理解
  2. Java基础-标识符
  3. [Android Pro] RecyclerView实现瀑布流效果(二)
  4. 情人节那点事,Power BI告诉你
  5. IOS上路_10-简单示例-手势识别2-1
  6. 大数据比海量数据多了什么
  7. 浅析刚参加工作的大学生的心理态势
  8. JJavaBean中使用JDBC方式进行事务处理
  9. Android NDK开发如何解决logcat日志打印不全
  10. [Android] View控件显示隐藏动画效果