随笔分类 - 数据结构 平衡树 set
摘要:【题意】给定n个点的带边权树,对于树上存在的若干特殊点,要求任选一个点开始将所有特殊点走遍后返回。现在初始没有特殊点,m次操作每次增加或减少一个特殊点,求每次操作后的总代价。n,m<=10^5。 【算法】虚树+DFS序+set 【题解】每次询问相当于求两倍虚树路径和。 模拟虚树上dfs序的转移会发现
阅读全文
摘要:【题目】F. Letters Removing 【题意】给定只含小写字母、大写字母和数字的字符串,每次给定一个范围要求删除[l,r]内的字符c(l和r具体位置随删除变动),求m次操作后的字符串。n<=2*10^5。 【算法】树状数组+平衡树(set) 【题解】因为坐标是序列变动后的,动态坐标可以转化
阅读全文
摘要:【旋转】 平衡树中的旋转是指在不改变中序遍历的前提下改变树的形态的方式。(中序遍历=排名顺序) 右旋将当前点的左节点旋上来,左旋反之。(图侵删) 原根k,新根o。 1.把k的左节点o解放出来并更新为o的右节点。 2.解放出来的o成为新根,其右孩子赋为k。 【Treap】树堆 功能:维护支持单点插入和
阅读全文
摘要:【题意】给定n头牛,k个特色,给出每头牛拥有哪些特色的二进制对应数字,[i,j]平衡当且仅当第i~j头牛的所有特色数量都相等,求最长区间长度。 【算法】平衡树+数学转化 【题解】统计前缀和sum[i][j]表示前i头牛特色为j的数量,则区间i~j平衡需要满足: sum[j][1]-sum[i-1][
阅读全文
摘要:【算法】并查集+平衡树+数学+扫描线 【题解】 经典曼哈顿距离转切比雪夫距离。 曼哈顿距离:S=|x1-x2|+|y1-y2|<=c 即:max(x1-x2+y1-y2,x1-x2-y1+y2,-x1+x2+y1-y2,-x1+x2-y1+y2) 令X1=x1+y1,Y1=x1-y1,则转化为 切比
阅读全文
摘要:【算法】扫描线+平衡树(set) 【题解】很明显的二维偏序数点,排序后扫描线,现加点后查询答案。 则问题转化为一维偏序,显然贪心找第一个比当前大的最优,所以用平衡树维护。 记得开multiset!!! #include<cstdio> #include<algorithm> #include<cst
阅读全文
摘要:【算法】splay 【题解】 splay维护序列,用权值(离散化)作为编号。每次找第i小的话直接找对应编号splay即可。 但是这样splay没有下传翻转标记?直接暴力找到路径然后从根到改结点pushdown。暴力出奇迹! 如果没有find就直接splay,一定记得更新设置splay为传值调用并且在
阅读全文
摘要:【算法】splay 【题解】对于每个结点维护其子树串的hash值,前面为高位,后面为低位。 sum[x]=sum[L]*base[s[R]+1]+A[x]*base[s[R]]+sum[R],其中sum为哈希,base为乘权,A为数值(即字符)。 #include<cstdio> #include<
阅读全文
摘要:【算法】splay 【题解】数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> #include<cstring> #include<queue> #include<algorithm> using namesp
阅读全文
摘要:【平衡树】★平衡树 by onion_cyc 【莫队算法】 问题:给定长度为n的序列和m个区间询问,支持快速增减相邻元素维护区间信息。 将询问按左端点分块,块大小为$Q=\frac{n}{\sqrt m}$,块内按右端点排序。 然后依次回答询问,需要O(1)从(l,r)转移到(l,r+1),(l,r
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文