08 2022 档案

摘要:可持久化线段树 顾名思义,就是可以存储历史信息的线段树。 比如我们对数组进行了n次修改,然后突然希望回到某个第i次版本。然后又基于这个版本进行一些新的修改等,就是可持久化线段树需要解决的问题。 我们仍然考虑单点修改与区间求和: 要点在哪里呢?实际上关键在于:我们不再修改每个老节点的信息,而是类似于动 阅读全文
posted @ 2022-08-13 15:18 s1monG 阅读(36) 评论(0) 推荐(0) 编辑
摘要:P3195 [HNOI2008]玩具装箱 原始方程 dpi=min(dpj+(sumi+isumjjL1)2). 我们设 ai=sumi+i bi=sumj+j+L+1 dpi=min(dpj+(aibj)2)dpi 由 $dp_j 阅读全文
posted @ 2022-08-13 13:38 s1monG 阅读(32) 评论(0) 推荐(0) 编辑
摘要:点分治 前置知识:树的重心 树形dp即可。 对于一棵树,我们可以把其中的路径分为两种,一种是过根节点的,一种是不过根节点的。 过根节点的路径我们很容易处理: 我们枚举它的子树,把已经出现过的路径长度维护起来。 当枚举到下一个子树的时候,与上面维护的路径一同计算即可。 对于不过根节点的路径,我们怎么处 阅读全文
posted @ 2022-08-13 13:36 s1monG 阅读(31) 评论(0) 推荐(0) 编辑
摘要:拓欧 求 ax+by=gcd(a,b) 要想求 ax+by=gcd(a,b) 先求 bx+(amodb)y=gcd(b,amodb)=gcd(a,b) bx+(a(a/b)×b)y=ax+by $bx'+ay'-((a/b)\times b) 阅读全文
posted @ 2022-08-13 13:36 s1monG 阅读(23) 评论(0) 推荐(0) 编辑
摘要:线段树 线段树本质上的区间操作是把区间分解为一个个区间的分别操作。 如:对于操作[2,8],分解为[2,2],[3,4],[5,8] 对于线段树中的懒标记 (lazytag) 实质上是在一个父亲上整体做的操作而儿子还未进行的操作。 模板线段树2 #include<algorithm> #in 阅读全文
posted @ 2022-08-13 13:36 s1monG 阅读(36) 评论(0) 推荐(0) 编辑
摘要:我们是怎么处理一条路径的呢?设这条路径端点是u,v,那么我们就可以把它当做uLCA(u,v)LCA(u,v)v。 我们从端点开始,往LCA跳。 如果跳到轻边,直接处理即可,因为一条轻边两端一定有重边。 如果跳到重边,就用线段树维护一下,因为重边的下标一定在线段树中是连续的,跳到重链 阅读全文
posted @ 2022-08-13 13:34 s1monG 阅读(18) 评论(0) 推荐(0) 编辑
摘要:例题P2015 二叉苹果树 原问题可以转化为留下q+1个点,求最多点权。 fu,i表示以u为子树,包括u留下i个点的最多点权。 u有两个儿子是l和r。 那么fu,i=max(fl,j+fr,ij1)+valu(0ji1) 例题P135 阅读全文
posted @ 2022-08-13 13:34 s1monG 阅读(22) 评论(0) 推荐(0) 编辑
摘要:为什么要 j 指针在最小质因子时退出呢,因为一个数只能被其最小质因子筛去,否则就会用不是最小质因子向后筛。例如15×3=45此时退出,要不然就会筛15×5=75,而75=3×25不应被5筛掉。 例题2 共有T次询问。如果一个正整数x小于N,而且x与N不互 阅读全文
posted @ 2022-08-13 13:34 s1monG 阅读(37) 评论(0) 推荐(0) 编辑
摘要:Trie字典树 是一种字符串的存储结构,节省空间,同时可以查询是否有字符串是其前缀,也是异或xor操作的利器。 POJ 3630 Phone List 模板: #include<algorithm> #include<cstring> #include<cstdio> const int MAXN= 阅读全文
posted @ 2022-08-13 13:33 s1monG 阅读(24) 评论(0) 推荐(0) 编辑
摘要:树状数组 一种可以单点修改,查询前缀和的数据结构。 每次操作O(logn) void Modify(int x,int k) { for(; x<=n; x+=x&(-x)) t[x]+=k; } int Query(int x) { int res=0; for(; x; x-=x&(-x 阅读全文
posted @ 2022-08-13 13:32 s1monG 阅读(35) 评论(0) 推荐(0) 编辑
摘要:CDQ 分治 归并排序 来自《算法导论》。 #include<algorithm> #include<cstdio> const int MAXN=1e6; int n,a[MAXN+10],l[MAXN+10],r[MAXN+10]; long long ans; void merge(int p 阅读全文
posted @ 2022-08-13 13:32 s1monG 阅读(35) 评论(0) 推荐(0) 编辑
摘要:哈希 选取一个指质数为底数base(通常取131,13331,1e9+7,1e9+9),一个模数(通常取 unsigned long long 中自然溢出中的264)。 一个字符串d长度为n,哈希值为hn=si×basei。 它的子串st的哈 阅读全文
posted @ 2022-08-13 13:31 s1monG 阅读(156) 评论(0) 推荐(0) 编辑
摘要:Lca 定义:对于两个点,他们的最近公共祖先 是他们的祖先(或自己) 距离最近 fi,j表示从节点i向上跳2j步能到达的节点。 将较深的点跳到深度相同。 两个节点一起跳,直到相同。 如图:3和8的最近公共祖先是1。 树的深度为5,log25=3。更深的是8。 $f_{8,3 阅读全文
posted @ 2022-08-13 13:31 s1monG 阅读(44) 评论(0) 推荐(0) 编辑
摘要:单调栈 例题1:Luogu5788 求解数组中元素右边第一个比它大的元素的下标。 由于要求解的是右边第一个大的元素,所以从右往左遍历。 维护一个从右到左递减的单调栈,最右是无限高。 每当有元素将要进栈,为了维护单调性,必须把单调栈中比它小的元素全部弹出。 因为它们已经没有用了,不可能被弹出的元素是某 阅读全文
posted @ 2022-08-13 13:30 s1monG 阅读(47) 评论(0) 推荐(0) 编辑
摘要:二进制操作 将第k位设为1 x = x | (1 << k) 将第k位设为0 x = x & -(1 << k) 查询第k位 x & (1 << k) (x >> k) & 1 如果等于0,那么第k位是0,否则是1 状压dp 模板题:TSP问题(遍历每一个点)(n20) 设$f_{s 阅读全文
posted @ 2022-08-13 13:30 s1monG 阅读(21) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示