http://www.lydsy.com/JudgeOnline/problem.php?id=1500 1.覆盖标记用INF表示无覆盖标记,要求可能用0覆盖 2.代表空节点的0号节点和首尾的两个虚拟节点,所有有关取max的信息全部设为负无穷,但注意不要无穷相加爆掉int 3.空间,用一个队列回收已删除的节点的编号 4.建树的时候采用的笛卡尔树的构造方式,但并没有比错误的忽略优先级的build快多少 5.手写的max快 inline int& max(int &x, int &y)…
终于A了这题...这题还是很好...但是我太菜...重构了三遍qwq FHQ Treap大法好!qwq...~~ Ins:直接拿输入造一棵树,把原来的树split成[1,pos],[pos+1,n],然后merge三棵树: Del:把要删的区间split出来,merge他两边的树,记着要回收内存: Mk-Same:把要改的区间split出来,打上标记,更新这棵树根的信息(见cover(x,v)),再merge回去: Rev:把要翻转的区间split出来,打上标记,更新这棵树根的信息(见rever…
http://www.lydsy.com/JudgeOnline/problem.php?id=3142 如果已知数列的差分数列a[1]~a[k-1] 那么这种差分方式对答案的贡献为 N-Σ a[i],i∈[1,k-1] 差分数列一共有多少种? M^(k-1) 种 所以ans=Σ  (N-Σa[i]) = M^(k-1) * N - Σ Σ a[i] = M^(k-1) *N-(k-1)*M^(k-1) /M * (M+1)*M/2 后面是因为一共 M个数 出现(k-1)*M^(k-1) 次,每…
Portal Gun:[BZOJ1500][NOI2005]维修数列 有一段时间没写博客了,最近在刚数据结构......各种板子背得简直要起飞,题目也是一大堆做不完,这里就挑一道平衡树的题来写写好了 关于这道题...该说什么好呢...网上好多人评论这道题又是难啊,又是要调很久什么的,还讲这是道平衡树的boos级别的题...看了题后,好像也没有说的这么难吧,思路比较简单,代码也不是特别长,splay也还算好码,虽然我这边现学 splay 现做确实花了不少时间,但总体来说这道题还是比较简单的. 题目…
Portal Gun:[BZOJ1500][NOI2005]维修数列 有一段时间没写博客了,最近在刚数据结构......各种板子背得简直要起飞,题目也是一大堆做不完,这里就挑一道平衡树的题来写写好了 关于这道题...该说什么好呢...网上好多人评论这道题又是难啊,又是要调很久什么的,还讲这是道平衡树的 boos 级别的题...看了题后,好像也没有说的这么难吧,思路比较简单,代码也不是特别长,splay也还算好码,虽然我这边现学 splay 现做确实花了不少时间,但总体来说这道题还是比较简单的.…
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色之后,任意满足要求的四联通块一定可以是 黑色-->紫左-->紫右-->白色 只要破坏三个箭头中的一个即可 所以可以构建最小割模型 1.源点向黑色格连流量为格子代价的边 2.黑色格向相邻的紫色格连inf边 3.与黑色格相邻的紫色格向与白色格相邻的紫色格连 流量 为 两个紫色格较小代价 的边 4…
维修数列 bzoj-1500 NOI-2005 题目大意:给定n个数,m个操作,支持:在指定位置插入一段数:删除一个数:区间修改:区间翻转.查询:区间和:全局最大子序列. 注释:$1\le n_{max} \le 5\cdot 10^5$,$1\le m \le 2\cdot 10^4$. 想法:据说是... ...最GB的平衡树裸题,如果把这题切了,话说所有的平衡树都不怕了. 具体的, 插入和删除对于非旋转Treap来讲都是基本操作: 区间修改的话我们就先删除然后插入即可: 区间反转就打标记:…
先是维修数列 题解看这里,但是我写的跑得很慢 #include <iostream> #include <cstdio> using namespace std; int n, m, idx[500005], a[500005], rot=0, uu, vv, sta[500005], din, ww, cnt; const int oo=0x3f3f3f3f; char ss[25]; struct Splay{ int zdz[500005], sum[500005], lma…
http://www.lydsy.com/JudgeOnline/problem.php?id=1499 预处理从每个位置向每个方向最多能走几步 dp[k][i][j] 第k个时间段后,钢琴到位置(i,j)能走的最长路径 枚举这一次走几步转移 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,m; ][];…
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j 位置的数是区间[i,j]的最大值和次大值 提供p2的攻击力:i,j位置的数有一个是区间[i,j]的最大值,另一个不是次大值 记录L[i].R[i] 分别表示i左右第一个大于k[i]的位置 p1的贡献: 1.点对(L[i],R[i])    2.点对(i,i+1) p2的贡献: 1.点对(L[i],…