题目:http://codeforces.com/contest/809/problem/D 看题解,抄标程...发现自己连 splay 都快不会写了... 首先,题目就是要得到一个 LIS: 但与一般不同的是,新加入的不是一个值,而是一个取值范围: 仍是设 f[i] 表示长度为 i 的 LIS 的结尾最靠前是哪个位置,而此时新出现一个区间 l~r: 如果 f[i] < l,那么可以接上一个 l 变成 f[i+1],也就是 f[i+1] = l: 如果 l <= f[i] <= r,也可…
[CF809D]Hitchhiking in the Baltic States(Splay,动态规划) 题面 CF 洛谷 题解 朴素\(dp\):设\(f[i][j]\)表示当前考虑到第\(i\)个元素,结尾位置是\(j\)的最大选择数. 然而这样就很呆. 换个状态:设\(f[i][j]\)表示当前考虑到第\(i\)个元素,长度为\(j\)时,最后一个数可以选择的最小值. 这个东西看起来就舒服多了. 拿\(Splay\)维护第二维,考虑每次加入一个区间对于答案的影响,假装当前加入区间是\([l…
[CF809D]Hitchhiking in the Baltic States 题意:给你n个区间[li,ri],让你选出从中一个子序列,然后在子序列的每个区间里都选择一个tj,满足$t_1<t_2<...<t_{len}$.最大化这个子序列的长度. $1\le n\le 3\cdot 10^5,1\le l\le r \le 10^9$ 题解:我们用dp[i]表示在当前情况下,选择的最后一个$t\le i$时,最多能选多少个区间.然后我们加入每个区间,同时维护所有的dp值. 当加入区…
CF809D Hitchhiking in the Baltic States CF809D 长度为n的序列{xi},n<=3e5,范围在(li,ri)之间,求LIS最长是多长g(i,l)表示前i个数,LIS长度为l,最后一个数最小是多少(就是那个单调栈)g(i,l)=min(g(i-1,l),xi (if exist j g(j,l-1)<x))关于l是递增的.虽然不知道xi是多少, 但是可以直接用(li,ri)进行计算!最后一定存在一种方法还原xi 刚好可以把一个g(i-1,l-1)+1-…
题目:http://codeforces.com/contest/809/problem/D 如果值是固定的,新加入一个值,可以让第一个值大于它的那个长度的值等于它. 如今值是一段区间,就对区间内的dp值都有影响:中间的那些的值变成了上一个的值+1,左边 l 处多了一个点,右边第一个大于等于 r 的点被删掉. 用 splay 维护这些点:点的个数就是最多能达到的长度. 又好好学习了一番 splay .带有标记的原来是要在那个 splay 操作前那样一条链地 pushdown下来呀. 非常奇怪的是…
题意: 给你n个区间[li,ri],让你选出从中一个子序列,然后在子序列的每个区间里都选择一个tj,满足t1<t2<...<tlent1<t2<...<tlen.最大化这个子序列的长度. 1≤n≤3⋅105,1≤l≤r≤109 题解: 首先我们很容易想到n^2的递推式 f[i]表示最后一个是i f[i]=max(f[i],max(f[j])+1) (l<=i<=r) 那么这样是可以O(n^2)扫一遍的 然后会发现这个东西不太好优化 我们很自然的会想到用前缀g…
传送门 看到最长上升子序列肯定是DP 设\(f_i\)表示计算到当前,长度为\(i\)的最长上升子序列的最后一项的最小值,显然\(f_i\)是一个单调递增的序列. 转移:对于当前计算的元素\(x\),它的取值范围为\([l,r]\),设当前可以转移的区间为\([j,k]\)(即对于\(\forall p \in [j,k] , f_p \in [l,r)\)且\(f_{j-1} < l , f_{k + 1} \geq r\)),则对于\(\forall p \in [j,k]\)都有\(f_{…
Description 给出 \(n\) 个数 \(a_i\),每一个数有一个取值 \([l_i,r_i]\) ,你来确定每一个数,使得 \(LIS\) 最大 题面 Solution 按照平时做法,设 \(f[i]\) 表示 \(LIS\) 长为 \(i\) 时, \(LIS\) 结尾的最小值 考虑插入一个取值为 \([L,R]\) 可以更新的值 找到小于 \(L\) 的第一个数 \(p\) 和小于 \(R\) 的第一个数 \(q\) 那么 \(f[p+1]\) 可以更新为 \(L\) , \(…
题意 给你长度为$n$的序列,序列中的每个元素$i$有一个区间限制$[l_i,r_i]$,你从中选出一个子序列,并给它们标号$x_i$,要求满足 $,∀i<j,x_i<x_j$,且$, ∀i,x_i∈[l_i,r_i]$. 问满足条件子序列的长度最长为多少? 其中$1\leq n\leq3\times 10^5\ 1\leq l_i\leq r_i\leq 10^9$ 题解 不妨设$f[i][j]$表示已经选到第$i$个,其中最大值为$j$最多能选几个. 显然是开不下的...但是还记得$O(n…
题目链接: E - Emptying the Baltic Kattis - emptyingbaltic 题目大意:n*m的地图, 每个格子有一个海拔高度, 当海拔<0的时候有水. 现在在(x, y)最深处放一个抽水机, 问最多能抽多少水,周围8个方向的水会流过来. 具体思路:对于每一个海拔小于0的点,判断这个点周围有水的最低高度.然后将这些高度加起来就可以了. AC代码: #include<bits/stdc++.h> using namespace std; # define ll…