首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
BZOJ3173 TJOI2013最长上升子序列(Treap+ZKW线段树)
】的更多相关文章
BZOJ3173 TJOI2013最长上升子序列(Treap+ZKW线段树)
传送门 Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N) Output N行,第i行表示i插入Xi位置后序列的最长上升子序列的长度是多少. Sample Input 3 0 0 2 Sample…
bzoj 3173: [Tjoi2013]最长上升子序列【dp+线段树】
我也不知道为什么把题看成以插入点为结尾的最长生生子序列--还WA了好几次 先把这个序列最后的样子求出来,具体就是倒着做,用线段树维护点数,最开始所有点都是1,然后线段树上二分找到当前数的位置,把这个点标为0(相当于对于这之前的序列这个点是不存在的),把每个数的位置记为p[i] 然后用另一颗线段树维护每个位置上的LIS,根据时间序,每次插入数的时候求一下以他结尾的LIS然后放进线段树上对应的p[i](因为按照数从小到大所以直接查这个数位置之前的即可),然后再取全部点的max即可 #include<…
[BZOJ3173][Tjoi2013]最长上升子序列
[BZOJ3173][Tjoi2013]最长上升子序列 试题描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 输入 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N) 输出 N行,第i行表示i插入Xi位置后序列的最长上升子序列的长度是多少. 输入示例 输出示例 数据规模及约定…
bzoj3173[Tjoi2013]最长上升子序列 平衡树+lis
3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2253 Solved: 1136[Submit][Status][Discuss] Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字X…
bzoj3173: [Tjoi2013]最长上升子序列(树状数组+二分倒推)
3173: [Tjoi2013]最长上升子序列 题目:传送门 题解: 好题! 怎么说吧...是应该扇死自己...看错了两次题: 每次加一个数的时候,如果当前位置有数了,是要加到那个数的前面,而不是直接替代ORZ 那么我们可以用二分倒推出最终数列,顺便记录位置 那么最后问题就变成给你一列数,nlogn求最长上升子序列啦 代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath&g…
【bzoj3173】[Tjoi2013]最长上升子序列 Treap
题目描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 输入 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N) 输出 N行,第i行表示i插入Xi位置后序列的最长上升子序列的长度是多少. 样例输入 3 0 0 2 样例输出 1 1 2 题解 Treap 考虑到数据是从小到大插入的…
bzoj3173: [Tjoi2013]最长上升子序列(fhqtreap)
这题用fhqtreap可以在线. fhqtreap上维护以i结尾的最长上升子序列,数字按从小到大加入, 因为前面的数与新加入的数无关, 后面的数比新加入的数小, 所以新加入的数对原序列其他数的值没有影响. 然后就可以直接fhqtreap模拟啦 忘记所有答案取max WA了半天T T #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #define lt tree[x…
bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)
https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某个数结尾的最长上升子序列产生影响 所以 先原序列求出来,输出即可 还原原序列的方法: 可以用平衡树,dfs序就是原序列 嫌麻烦,不想写,所以 树状数组 假设最后一个数是n,插入位置是y, 倒数第二个数是n-1,插入位置是x 那么y就是n的最终位置 如果y在x后面,那么x就是n-1的最终位置 如果y…
BZOJ3173:[TJOI2013]最长上升子序列(Splay)
Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N) Output N行,第i行表示i插入Xi位置后序列的最长上升子序列的长度是多少. Sample Input 3 0 0 2 Sample Outp…
51nod 1376 最长递增子序列的数量(线段树)
51nod 1376 最长递增子序列的数量 数组A包含N个整数(可能包含相同的值).设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可能有很多个.例如A为:{1 3 2 0 4},1 3 4,1 2 4均为A的LIS.给出数组A,求A的LIS有多少个.由于数量很大,输出Mod 1000000007的结果即可.相同的数字在不同的位置,算作不同的,例如 {1 1 2} 答案为2. Input 第1行…