splay
AC_alvin
这个作者很懒,什么都没留下…
展开
-
【FZU 1978】Repair the brackets (Splay)
这道题的难点主要在于如果快速地求出一段括号序列最少改变多少个可以变成合法的。看了题解报告才知道原来是这样的。对于一段括号序列,设(为1,)为-1,则设从序列开始的和最小值为x,整段序列和为y则(abs(y - x) + 1)/2 + (abs(x) + 1) / 2为答案因为最小值则意味着前面有abs(x)个“)没有”(“与其匹配,因此至少需要将(abs(x) + 1) /2 个”原创 2014-09-18 21:46:08 · 672 阅读 · 0 评论 -
【HDU 4453】 Looploop(Splay)
splay简单操作集合原创 2014-09-06 20:09:36 · 567 阅读 · 0 评论 -
【HDU 4441】 Queue Sequence(Splay)
这道题也是一道splay的基础操作的集合题,主要包含有三种操作:insert p :在p位置插入当前未出现的最小的数,如当前出现了1 2 3 6,那再插入4且正数和负数同时插入,而负数插入的位置要求:该负数左边负数的个数和该数的相反数的左边的正数的个数一样多且最为靠右则若2左边有4个正数,那么-2就应该插入在满足左边有4个负数的最靠右的位置而如何找到最小的数呢?用一个优先队列维护一原创 2014-09-09 18:54:29 · 677 阅读 · 0 评论 -
【HDU 3436】Queue-jumpers(Splay)
Splay的基础操作。问题的关键就在于N非常大,就算是利用Splay数组也是远远开不下的,因此很自然地想到了hash一下可以将所有要进行Top的节点和Query的节点然后对于每一个节点或者每一个段,可以将它的长度表示出来(方便起见每个点可以看做一个长度为1的线段)剩下的就是Splay的基础操作了1、top:将节点删除后插入到队首2、Rank:找到当前子树的第k个数3、Que原创 2014-09-13 20:41:16 · 509 阅读 · 0 评论 -
【HDU 3487】Play with Chain(Splay)
Splay的基础操作。1、删除某一个区间,然后从某个位置插入,可以将其旋转到关键树上去然后删掉就行了2、旋转某个区间。#include#include#include#define keytree (ch[ ch[root][1] ][0])using namespace std;const int SIZEN = 300005;struct SplayTree{原创 2014-09-13 20:52:13 · 481 阅读 · 0 评论 -
【HDU 5021】 Revenge of kNN II
这道题当时比赛的时候没时间看了(虽然有时间也不一定做得出来_(:з」∠)_),但是其实思路没有那么复杂主要就是对于每一个询问,因为所覆盖点的数量具有单调性,因此二分枚举所覆盖点的半径,然后可以找出左边点的个数和右边点的个数若个数==K 则直接返回左右点的标号,若个数==k + 1则需要判断一下左右边点的标记号哪一个较小,然后舍弃较大的那个,直接返回左右标号具体看代码吧~#inclu原创 2014-09-23 21:06:41 · 573 阅读 · 0 评论 -
【HDU 5040】Instrusive
这道题在题意描述上让我很捉急,也可能是开这道题的时候已经进入了比赛的后半段,整个人也是感觉萌萌哒因此在题意的理解方面出现了较大偏差今天再把这道题翻出来做做,其实发现题意也没这么难理解只要理解为:在1s之内,先是Matt动,然后再是探照灯动,再对状态进行分析就可以了而我想到的是每一个格子有四种状态,分别是time % 4的情况,因为若time % 4的值相同则探照灯的朝向也是相同的原创 2014-09-23 20:23:55 · 594 阅读 · 0 评论