------树巨结构------
文章平均质量分 59
Drenight
Dream in the night.
展开
-
[Usaco2017 Jan]Promotion Counting 线段树合并模板/dfs序
两种做法,因为是求整个子树的值域问题所以可以按dfs序把进点和出点的数量作差#include<bits/stdc++.h> //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<algorithm> #include<que...原创 2018-03-01 22:30:33 · 201 阅读 · 0 评论 -
[Poi2011]Tree Rotations线段树合并
整理一下线段树合并的思路,大体是给每个树上节点分配一个根编号建一棵log长的权值线段树,一开始树上只有这个树节点的节点权merge两个树节点的时候,对于当前合并的值域(例如两棵线段树的表示1到n/2的节点),任意取两棵树中的一个节点编号,空的返回另一个,把树丰满起来,同时更新一下计数就可以了#include<bits/stdc++.h> //#pragma comment(link...原创 2018-03-02 00:21:40 · 217 阅读 · 0 评论 -
【POJ Challenge】生日礼物 加强m子段和
还是链表跟二叉堆的双映射//#include<bits/stdc++.h> //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<algorithm> #include<queue> #include<str...转载 2018-02-24 11:02:20 · 207 阅读 · 0 评论 -
并查集负值根表集合大小的写法
这个写法就能高效查集合大小了const int maxn=1e2+43; int fa[maxn],n; void init(){for(int i=1;i<=n;i++)fa[i]=-1;} int find(int x){ if(fa[x]<0)return x; fa[x]=find(fa[x]); return fa[x]; } void unite(int x,in...原创 2018-03-04 15:22:40 · 228 阅读 · 0 评论 -
Lost Cows POJ - 2182 树状数组+倍增
需要用树状数组维护01序列前缀和,并且查找某个位置的前缀和是k,也就是前面有k个1这个可以用二分,两个log,但是用倍增就是一个log不得不说树状数组和倍增的相性真的很好,倍增到的节点维护信息与上一级完全没有重合譬如说跳8可以跳到8,跳4的时候如果可以跳12直接加上c[12]就可以,因为c[12]维护的是c[9]到c[12]#include<bits/stdc++.h> //#pr...原创 2018-03-04 17:23:18 · 462 阅读 · 0 评论