UVa 1471 防线】的更多相关文章

https://vjudge.net/problem/UVA-1471 题意:给出一个序列,删除一个连续子序列,使得剩下的序列中有一个长度最大的连续递增子序列,输出个数. 思路:首先可以计算出以i结尾的最大连续递增子序列个数 f(i) 和以i开头的最大连续递增子序列 g(i).之后就是动态规划吧,题目挺抽象,不太好解释,具体看代码吧. #include<iostream> #include<algorithm> using namespace std; * + ; int n; i…
给一个长度为n的序列,要求删除一个连续子序列,使剩下的序列有一个长度最大的连续递增子序列. 最简单的想法是枚举起点j和终点i,然后数一数,分别向前或向后能延伸的最长长度,记为g(i)和f(i).可以先预处理出每一个点能往前和往后延伸的长度(g(i)和f(i)).然后枚举终点i,快速找一个g(j)最大的起点.如果有两个候选的起点,一个j,一个j‘,A[j']<=A[j]且g[j']>g[j],那么j一定可以排除,g(j')更大,而且更容易拼接. 固定i的情况下,所有有价值的(A[j],g(j))…
题意是说给一个序列,删掉其中一段连续的子序列(貌似可以为空),使得新的序列中最长的连续递增子序列最长. 网上似乎最多的做法是二分查找优化,然而不会,只会值域线段树和离散化... 先预处理出所有的点所能延伸到最左端的长度,和到最右端的长度,然后离散化,然后对于当前的点,就交给值域线段树去查出前面最大的符合条件的向左延伸的长度,加上当前位置最大向右延伸的长度,更新答案即可. Code /** * UVa * Problem#1471 * Accepted * Time:1190ms */ #incl…
After the last war devastated your country, you - as the king of the land of Ardenia - decided it washigh time to improve the defense of your capital city. A part of your fortication is a line of magetowers, starting near the city and continuing to t…
题意: 给出一个序列,删掉它的一个连续子序列(该子序列可以为空),使得剩下的序列有最长的连续严格递增子序列. 分析: 这个可以看作lrj的<训练指南>P62中讲到的LIS的O(nlogn)的优化变形过来的问题. 预处理: Li是第i个元素Ai向左延伸的最大长度,即[i, i + Li - 1]是一个递增区间 同样地,Ri是第i个元素向右延伸的最大长度. 我们,可以枚举i, j(j<i 且 Aj < Ai),这样就可以把Aj和Ai“拼接”起来,所得到的最长连续递增子列的长度就是Lj…
题意: 给一个长度为n(n <= 200000) 的序列,你删除一段连续的子序列,使得剩下的序列拼接起来,有一个最长的连续递增子序列 分析: 就是最长上升子序列的变形.需要加一个类似二分搜索就好. 代码: #include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn=200005;const int…
紫薯例题+1. 题意:给你一个长度为n(n<=200000)的序列a[n],求删除一个连续子序列后的可能的最长连续上升子序列的长度. 首先对序列进行分段,每一段连续的子序列的元素递增,设L[i]为下标i对应的元素向左能延伸到的最大长度(在同一段内),R[i]为向右能延伸到的最大长度,则问题转化成了对于每个下标i,找到在它前面的下标j中a[j]<a[i]且L[j]最大的j,然后用R[i]+L[j]去更新ans. 第一种方法是用一个二元组(x,y)表示大小为x的元素所对应的L的值,用一个set保存…
题意:给定一个序列,然后让你删除一段连续的序列,使得剩下的序列中连续递增子序列最长. 析:如果暴力枚举那么时间复杂度肯定受不了,我们可以先进行预处理,f[i] 表示以 i 结尾的连续最长序列,g[i] 表示以 i 开头的连续最长序列,然后再去找最长的, 枚举 i,然后用set来维护一个单调上升的序列,我们把已经扫过的用set处理,按a[i]从小到大排序,然后f[i]也是从小到大,把不是最优的解全删掉,从而减少的要遍历的数目. 然后动态处理每个值. 代码如下: #pragma comment(li…
                              Defense Lines After the last war devastated your country, you - as the king of the land of Ardenia - decided it washigh time to improve the defense of your capital city. A part of your fortification is a line of magetower…
设切割的区间为(j, i), 注意两边都是开区间. 然后可以预处理出以i为起点的最长连续递增的长度和以j为终点的最长连续递增的长度. 大致思路就是枚举i,右边这一侧的最优值就知道了, 然后这道题的关键就是就是j取哪里. (1)去掉干扰元素, 这一步非常的关键, 设题目给的数组为a, g(i)表示以i为结尾的最长递增序列长度 在j < i中, 如果 a[j'] <= a[j] 同时 g(j') > g(j), 那么 j这个元素肯定不是最优的.因为如果j可以取的话 j'就一定可以取, 而且更…