LIS
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
D.Drop Voicing(LIS)
D.Drop Voicing(LIS) 思路:LISLISLIS. 比赛的时候没在想出来,事实上操作2就相当于在环上改变相对顺序,也就是题解所说的指针,然后操作1就是可以改变指针所指元素的位置。题目可以在看成在一个环上操作,要使操作1最少,我们考虑枚举起点(也就是指针指向的初始位置),然后肯定要选取最长递增子序列作为开始,这样剩下要调整的数是最少的。然后就是LISLISLIS板子了。 时间复杂度:O(n2logn)O(n^2logn)O(n2logn) #include<bits/stdc++.h&g原创 2020-07-25 18:11:00 · 373 阅读 · 0 评论 -
P1233 木棍加工(LIS)
P1233 木棍加工(LIS) 传送门 思路:挺好的LISLISLIS题,因为有两个属性,考虑将一个属性递减排序,然后对令一个属性求LISLISLIS就是答案了。 时间复杂度:O(nlogn)O(nlogn)O(nlogn) #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=5e3+5; #define mst(a) memset(a,0,sizeof a) #define lx x<原创 2020-06-09 13:22:02 · 418 阅读 · 0 评论 -
P1439 最长公共子序列 (LCS转LIS)
P1439 最长公共子序列 (LCS转LIS) 传送门 思路:离散化的好题。因为全排列的特性,可以将aaa数组进行一个离散化,双射。映射为1,2,3,4…n1,2,3,4\dots n1,2,3,4…n.然后题目就转化为求bbb数组中的LISLISLIS,然后用O(nlogn)O(nlogn)O(nlogn)求法就解决了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; #原创 2020-06-08 16:32:57 · 357 阅读 · 0 评论 -
送礼物(LIS)
送礼物(LIS) 传送门 LISLISLIS保存的不是最长递增子序列,而是对应的LISLISLIS长度的最小末尾元素。 比如1,3,5,21,3,5,21,3,5,2 数组ddd保存的就是1,2,51,2,51,2,5,而1,3,51,3,51,3,5才是LISLISLIS. 若要求出LISLISLIS序列还需要用一个数组pospospos,记录每个元素对应的LISLISLIS长度。 并且这样求出来的LISLISLIS对应的序号是按字典序最大排的。因为对于相同长度的LISLISLIS的元素,后面会比之原创 2020-05-30 17:45:15 · 291 阅读 · 0 评论 -
F - LIS on Tree(LIS&DFS)
F - LIS on Tree(LIS&DFS) 题目传送门 题意:给定一棵树,求所有结点到根结点的LISLISLIS长度。 思路:显然根据LISLISLIS的贪心思想,我们可以对其在树上进行操作,与普通的LISLISLIS不同的是,一开始我们可以将存 放LISLISLIS的数组进行初始化为infinfinf,这样每次只需要进行二分操作就行了,省去了直接添加到数组末尾的那一步。由于 不同L...原创 2020-05-03 17:18:13 · 461 阅读 · 0 评论 -
P1091 合唱队形 (DP&LIS)
P1091 合唱队形 (DP&LIS) 题目传送门 思路:显然正反跑两边LIS,遍历一遍取最值即可。时间复杂度:O(n^2) 不过可以用upper_bound()左到O(nlogn)这里就不写这种做法了。。。。 AC代码: #include<bits/stdc++.h> using namespace std; const int N=105; int a[N],dp[2][N...原创 2020-04-17 15:18:37 · 339 阅读 · 0 评论 -
最长递增子序列的三种解法(LIS)
最长递增子序列的三种解法(LIS) 1.用LCS(求LIS) 时间复杂度O(n^2) 思路:将原序列a排序后产生一个新的序列b,比较a和b最长公共子序 结果就是LIS. #include<bits/stdc++.h> using namespace std; const int N=1e4+5; int dp[2][N];//滚动数组优化 string a,b; int LCS(...原创 2020-03-24 16:28:47 · 504 阅读 · 0 评论