[JOI2012春季合宿]Rotate (链表)】的更多相关文章

题意 题解 又是一道神仙题-- 显然的做法是大力splay,时间复杂度\(O((N+Q)N\log N)\), 可以卡掉. 正解: 使用十字链表维护矩阵,在周围增加第\(0\)行/列和第\((n+1)\)行/列,设\(li[x][d]\)表示\(x\)这个点在\(d\)这个方向上的下一个元素的编号是什么(一开始给每个元素都编上号).那么对于一次旋转,子矩形边界上的格子暴力修改,内部相当于把\(4\)个方向做了个轮换,因此可以打标记实现. 然而本题的实现方法比较神奇: 每次修改从\((0,0)\)…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4388 题解 模拟Prim算法? 原题所述的过程就是Prim算法求最大生成树的过程.于是我们可以知道起始点并没有影响. 那么就用数据结构模拟Prim算法吧. 首先离散化所有区间,每个区间只需要一个点和外面相连,其余点均按照覆盖该点区间的最大权值与这个点相连.因此简单利用线段树即可求出这一部分的答案. 对于剩下的部分,用维护\(T\)表示目前没有加入的点,先加入左边\(1\)号点,同时用大…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4221 题解 orz WYC 爆切神仙DP 首先将所有袋鼠按大小排序.考虑从前往后DP, 设\(f[i][j]\)表示前\(i\)个元素形成了\(j\)条链. 然而需要处理"套到不能套为止"的问题,因此再加一维: \(k\)表示目前有多少个元素确定了必须要套后面的袋鼠. 设\(cnt[i]\)表示有多少个别的袋鼠能套\(i\). 那么从\(i-1\)转移到\(i\)时\(k\)…
题意 题解 神仙结论题. 结论: 一个点集合法当且仅当其凸包上的两种颜色点分别连续. 证明: 必要性显然. 充分性: 考虑对于一个不同色三角形\(ABC\),不妨设点\(A\)为白点,点\(B,C\)为黑点.若形内无白点,则随便连,显然成立.若形内有白点,则任取一白点\(S\), 对三角形\(SBC,BAS,CAS\)内部的点分别连边(递归构造),最后连接\(SA\). 再考虑一个凸包,设在逆时针方向上最后一个白点是\(U\), 最后一个黑点是\(V\), 则连接\(UV\), 把凸包剖成两个部…
题目分析: 好像跑得很快,似乎我是第一个启发式合并的. 把玩具看成区间.首先很显然如果有两个玩具的进出时间有$l1<l2<r1<r2$的关系,那么这两个玩具一定在不同的栈中间. 现在假设一定有解,我们怎么得到答案呢?排序会使得计算变得方便,下面我们按照左端点排序. 想象一条扫描线,从左往右,当它遇到了一个区间的左端点的时候,我们尝试着将原先不在一起的合并,所有和这个不同栈的都被合并. 我们可以想象一个并查集,使用堆维护并查集.堆内存储并查集内元素的右端点.在最外面再用一个大堆来存储每个并…
题意 你有两个栈,有 \(n\) 个货物,每个货物有一个进栈时间和出栈时间(所有时间的并集是1~2n),问有多少种不同的入栈方案. \(n\le 10^6\) 分析 把每个货物的存在看成区间,相交的区间不能在同一个栈中.这样就有了 \(O(n^2)\) 连边的方式,再用二分图染色判断一下是否合法即可.合法方案数就是 \(2^{连通块个数}\). 考虑将所有区间按照左端点排序,用一个 set 维护和当前区间相交的区间.由于不能出现三元环所以所有和当前区间相交的区间都是包含关系,这种包含区间之间形成…
Description 小M有两个本质不同的栈. 无聊的小M找来了n个玩具.之后小M把这n个玩具随机顺序加入某一个栈或把他们弹出. 现在小M告诉你每个玩具的入栈和出栈时间,现在她想考考小S,有多少种方案,把每个玩具分配给两个栈之一,并且存在一种满足小M告诉你的入栈和出栈时间的入栈序列. 可怜的小S当然不知道啦,所以他求助于你. Solution 考虑把存在矛盾的玩具连边,设 \(k\) 是最后的连通块数,如果这个图是二分图,那么答案就是 \(2^{k}\) 这样连边是 \(O(n^2)\) 的,…
Description 小S和小M去看花火大会. 一共有 n 个人按顺序排成一排,每个人手上有一个仅能被点燃一次的烟花.最开始时第 K 个人手上的烟花是点燃的. 烟花最多能燃烧 T 时间.每当两个人的位置重叠且其中一个人手上的烟花是点燃的时,另一个人手上的烟花可以被点燃. 现在小M想要知道,每个人至少需要以多快的速度 s 奔跑,才能使得每个人手中的烟花都能被点燃. 可怜的小M当然不会啦,所以她向你求助. Solution 首先二分答案,算出一个人点燃烟花后最多可以走的距离 \(s\) 要猜一个结…
自己的AC做法似乎离正解偏了十万八千里而且复杂了不少--不管怎样还是记录下来吧. 题意: 题目链接: JOISC2017 F - AtCoder JOISC2017 F - LOJ \(N\)个车站排成一行,第\(i\)个车站有一个在\([1,M]\)之间的权值\(l_i\).有\(M\)种列车,第\(i\)种在所有满足\(l_j \geq i\)的车站\(j\)停靠.如果搭乘一种列车从\(u\)到\(v\),需要在\(u\).\(v\)之间的所有停靠站(包含\(u\)和\(v\)),各停车一次…
暴力就是O(n^2)连边,二分图,这样只有22分. 我们考虑优化建边,我们按照左端点排序,对于一个新加进来的线段,我们向左端点距其最近的和他相交的线段连边,别的相交的我们连同色边,当一个点连了两条同色边我们就把它删掉,复杂度O(nlogn),边数O(n). #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #…