摘要: 这道题要求区间反转。。。好东西。。 对于Splay:把l-1旋到根,把r+1旋到根的右儿子,这样r+1的左儿子就是整个区间了,然后对这个区间打个tg 注意要插-Inf和Inf到树里面,防止越界,坐标要+1 对于FHQ Treap,先把[1,l-1]和[l,n]split出来,再把[l,r]和[r+1 阅读全文
posted @ 2019-05-06 12:25 LuitaryiJack 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 今天翻了翻其他大佬的博客,发现自己有些。。。颓废。。。 有必要洗心革面,好好学习 序:正常的BST有可能退化,成为链,大大降低效率,所以有很多方法来保持左右size的平衡,本文将简单介绍Treap,Splay,替罪羊,FHQ Treap; 另:代码都是普通平衡树 1.Treap 树堆,在数据结构中也 阅读全文
posted @ 2019-05-06 11:30 LuitaryiJack 阅读(578) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-05-04 16:09 LuitaryiJack 阅读(14) 评论(0) 推荐(1) 编辑
该文被密码保护。 阅读全文
posted @ 2019-05-04 15:58 LuitaryiJack 阅读(12) 评论(1) 推荐(1) 编辑
摘要: 我死了。。。被绿题虐。。。看来我的水平有待提高。。。QWQ 好吧,就是跑步的时候只能从跑步的状态转移过来 休息的时候可以从上一次休息时转移过来,也可以从某次跑步的时转移过来,需要枚举从哪一个状态转移来的 就是这样,可是我不会。 2019.04.28在明天考试前突然意识到自己是个渣渣+zz+菜的不行的 阅读全文
posted @ 2019-04-28 19:07 LuitaryiJack 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组。。。。 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和。 然后初始化时用上二维前缀和 DP时有些像区间DP,枚举分割线,分成两部分,取min就好 第一次define for循环, 阅读全文
posted @ 2019-04-28 18:58 LuitaryiJack 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 要自下向上调整,尽可能用一个道具修改多个; 搜的时候记录叶节点的最大深度,减一下就好了。 2019.04.26 阅读全文
posted @ 2019-04-28 14:32 LuitaryiJack 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 背包。。。差不多。。QWQ 设f[i]为达到差值为i的状态需要多少次,那就很显然了; 注意区分正负不同的代价的循环方向 技巧:如果不想改负数的话,那可以移动一下数组下标,用一个新的指针指向原来的数组 2019.04.29 阅读全文
posted @ 2019-04-28 14:10 LuitaryiJack 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 又重构了一下。。。当然当初的题一看就看懂了QAQ 设f[i][j]表示以i为根的子树,有j个客户的最大收益 方程:f[u][j+k]=max(f[u][j+k],f[u][j]+f[v][k]-w(u,v)) 0<=j<=lastsize,0<=k<=v.size 2019.04.28 阅读全文
posted @ 2019-04-28 13:41 LuitaryiJack 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 刚才瞅了半天自己当初写的,终于瞅出来了。。。QWQ 设f[i][j]表示以i为根的子树,包含j个节点所需砍掉的最小边数 那么可知f[u][1]=u的度; 方程:f[u][j]=min(f[u][j],f[u][j-k]+f[v][k]-2); 为何减2? 因为你已经默认了把与自己相连的所有边都去掉了 阅读全文
posted @ 2019-04-28 13:14 LuitaryiJack 阅读(128) 评论(0) 推荐(0) 编辑
摘要: f[i][j]表示在第i个垃圾,高度为j的最大生命值 转移分三部分: 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j-a[i].v]的生命值,则可以垫高度 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j]的生命值,则可以吃 如果j<当前 阅读全文
posted @ 2019-04-28 12:39 LuitaryiJack 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 第一问求最长下降子序列,不提; 第二问:借鉴了最短路的方法??? 我们求出来了每个位置的最长下降子序列的长度,那么刻意这样这样转移 if f[i]==f[j]+1&&a[i]<a[j](i>j) 这代表f[i]可以由f[j]转移过来,所以 f[i]+=f[j] 但是会重复,所以当f[i]==f[j] 阅读全文
posted @ 2019-04-28 11:58 LuitaryiJack 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 复习复习DP。。。都忘了QAQ... 好了这道题我其实是看题解才会的。。。 方程 f[i]=min(f[i-j]+v[i]) v[i]表示i是不是石头 s<=j<=t 路径压缩引用一下证明From Luogu@Panda_Hu 2019.04.28 慌得一批QAQ 阅读全文
posted @ 2019-04-28 11:49 LuitaryiJack 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 据说某谷数据十分水。。。但幸好BZOJ上也过了。。。话说我记得讲课时讲的是奇奇怪怪的离散化。。但现在突然觉得什么都可以线段树瞎搞了。。。QAQ 直接就是这个区间有没有被覆盖,被覆盖直接return; 如果出现修改,那么就说明它能被看见,++ans 短的一批的线段树(去了不必要的操作码量还是很小的。。 阅读全文
posted @ 2019-04-28 00:00 LuitaryiJack 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 咕咕了。。。于是借鉴了小粉兔的做法ORZ。。。 其实就是维护最大子段和的线段树,但上面又多了一些操作。。。。QWQ 维护8个信息:1/0的个数(sum),左/右边起1/0的最长长度(ls,rs),整段区间中1/0的连续最长长度(mx)。 于是对于各个操作,我们有了一些tag。。。 tg1[]是区间赋 阅读全文
posted @ 2019-04-27 23:25 LuitaryiJack 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 这个题扔到A*可也还行。。。 定义估价函数h():为每个数或空格的位置 到 最终状态中所在位置 的 曼哈顿距离 的 总和。 把状态压成一个九进制数,便于存储和判重。 然后记录方案可以记录一下此次的操作和上一次的状态,具体见代码。 安利一篇博文:http://www.cnblogs.com/goodn 阅读全文
posted @ 2019-04-27 15:24 LuitaryiJack 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 题意是让求从st的ed第k短路。。。 考虑A*算法:先把终点到每个点最短路跑出来(注意要建反图),当做估价函数h(u),然后跑A* 每次取出总代价最小的,即g(u)+h(u)最小的进行扩展,注意如果u被取出的次数c[u]>k,就不再进行扩展了。 当ed被取出且c[ed]==k,那么答案就是此时的g( 阅读全文
posted @ 2019-04-27 13:24 LuitaryiJack 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 重构一遍就A了。。。但这样效率太低了。。。莫非都要重构???QWQ 每一秒男同志bfs3层,女同志bfs1层。注意扩展状态时,要判一下合不合法再扩展,而不是只判扩展的状态合不合法,否则有可能由非法的走到合法的地方。 2019.04.27 阅读全文
posted @ 2019-04-27 12:35 LuitaryiJack 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 然而我也不知道这是啥啊。。。反正差不多。。。哪位大佬给区分一下QWQ。。 好的,我把堆的<写反了。。又调了一个小时。。你能不能稳一点。。。。 记录状态:所在位置u,油量c,花费w 扩展状态: 1.如果c+1<=C,就加1升油,为什么只加1升?因为如果这个状态不优,那它就会乖乖待在堆底下,不会多出现冗 阅读全文
posted @ 2019-04-26 21:50 LuitaryiJack 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题。。QWQ) 而对于这道题,边旋转代价是1,不旋转代价是0;可以直接建图最短路,也可以跑BFS 这个题建图很有意思:如果是' \ '就在mp上记录:1,反之 ' / '在上面记录为0 至于如何用:如果一个点在左上,一 阅读全文
posted @ 2019-04-26 20:05 LuitaryiJack 阅读(153) 评论(0) 推荐(1) 编辑