数据结构
wspl654321
。。。。。。
展开
-
二叉搜索树
#include<cstdio>using namespace std;const int M=9999;struct tr{ int l,r,x,size,num,f;}a[M];int tot=1;void insert(int v,int u){ if(!v)return; if(u>a[v].x) { if(!a[原创 2017-05-22 22:41:41 · 179 阅读 · 0 评论 -
树链剖分专题
树剖班子 把树弄成重链和轻链 用线段树或某些毒瘤平衡树维护 向上跳#include<cstdio>#include<iostream>using namespace std;const int M=210000;int n,m,r,p,to[2*M],nex[M*2],head[M],tot,f[M],dep[M],top[M],val[M],cnt,si...原创 2018-02-22 20:34:39 · 131 阅读 · 0 评论 -
有问题的左偏树
wa了一点。。。不知为什么 路过的大佬帮忙看一下啦 谢谢啦#include<cstdio>#include<iostream>const int M = 110000;int n,m,A[M];struct node{int ls,rs,h,w,f;}t[M];int merge(int a,int b){ if(!a) return b;if(!b...原创 2018-02-22 20:59:27 · 165 阅读 · 0 评论 -
[HDU 4825] Xor Sum(01字典树+贪心)
这题用01trie 可以递归可以迭代,查找时找亦或起来大的#include<cstdio>#include<iostream>#include<cstring>const int M=3420000;int n,m,T,a[M],tot;struct zo_trie{int val[M],son[M][2]; void init(){mem...原创 2018-02-23 15:54:26 · 206 阅读 · 0 评论 -
树剖例题
P1505 [国家集训队]旅游 大裸题,第一次少打了个min。。。 错了无数次。。。 才发现少了个min 。。。。,也可以LCT#include<cstdio>#include<iostream>#include<set>using namespace std;const int M=200010,INF=1000; int n,m,to...原创 2018-03-10 14:04:36 · 256 阅读 · 0 评论 -
李超线段树
现在要求你在线动态维护一个二维平面直角坐标系,支持插入一条线段,询问与直线x=x0相交的所有线段中交点y的最大/最小值–李超线段树解决的问题现在我们只考虑询问最大,事实上最小是同理的线段树维护覆盖这个区间的”最优势线段”,”最优势线段”指覆盖此区间且暴露最多的线段比如对于区间A红色为”最优势线段”可以证明对于一个位置的询问,答案一定在所有包含这个位置的区间的”最优势线段”里...转载 2018-03-10 14:12:42 · 265 阅读 · 0 评论 -
P4178 Tree
点分治裸体#include<algorithm> #include<cstdio>#include<iostream>const int M=41000,INF=1e7;int n,m,head[M],nex[M*2],to[M*2],tot,root,cos[M*2],size[M],dep[M],vis[M],minn[M],sum,cnt,di...原创 2018-03-10 14:14:12 · 162 阅读 · 0 评论 -
P4243 [JSOI2009]等差数列
P4243 [JSOI2009]等差数列 这个题可以用差分做 因为等差数列的性质就是差相等 我们维护这些东西 当前区间的左端点的数值 ->vl 当前区间的右端点的数值 -> vr 当前区间如果左右端点都不选有多少个等差数列 -> s[0] 当前区间如果只选左端点有多少个等差数列 -> s[1] 当前区间如果只选右端点有多少个等差数列 -> s...原创 2018-03-10 16:19:19 · 327 阅读 · 0 评论 -
[HEOI2016/TJOI2016]序列(树套树)
暴力dp j<i,max[j]<a[i],min[i]>a[j]dp[i]=dp[j]+1j<i,max[j]<a[i],min[i]>a[j]dp[i]=dp[j]+1jfor(int j=1; j<i; ++j) if(a[j]<=minv[i]&原创 2018-02-24 11:15:57 · 249 阅读 · 0 评论 -
P3313 [SDOI2014]旅行
树链剖分+有颜色的线段树// luogu-judger-enable-o2#include<cstdio>#include<iostream>using namespace std;const int M=4120000,N=420000;int tot,cnt,n,m,root[N],nex[2*N],head[N],to[2*N],c[N],d[N],f[...原创 2018-02-24 11:16:59 · 287 阅读 · 2 评论 -
情报传递
第一问就是树上距离 第二问,两个限制T// luogu-judger-enable-o2#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int M=210000,N=1000010;int n,m,to[2*M],nex[M*2],h...原创 2018-03-11 15:48:57 · 452 阅读 · 0 评论 -
可持续化trie树
转自http://blog.csdn.net/BerryKanry/article/details/76165196世界真的很大trie树贪心求最大异或和大概也就是那么回事了但是对于区间的查询就不是那么容易的了考虑主席树的思想,怎么得到区间的值域的这就是可持久化的trie树说来容易指针教做人哪看题先:description:给定一个非负整数序列 {a},初始长度为 N。 ...转载 2018-03-11 15:50:46 · 542 阅读 · 0 评论 -
splay文艺平衡树
splay的区间操作#include<cstdio>#define ll long longusing namespace std;const int M=201000;int root=0,cnt;int n,m,date[M];struct splaytree{ int key[M],ch[M][2],f[M],size[M],flag[M]; vo...原创 2018-02-22 20:23:40 · 120 阅读 · 0 评论 -
树状数组套主席书
主席书可以修改区间了#include<cstdio>#include<algorithm>#include<iostream>using namespace std;typedef long long LL;#define lson l, m#define rson m+1, rconst int N=60005;int a[N], Hash...原创 2018-02-22 20:18:14 · 175 阅读 · 0 评论 -
并查集专题
洛谷P3144 [USACO16OPEN]关闭农场关闭农场 离线的反着的并查集 看看在不在一个集合内#include<cstdio>#include<queue>#include<cstring>#include<iostream>using namespace std;int n,m;int f[99999],a[3009][3099],b[3999];int ans[19999原创 2017-08-04 15:35:26 · 239 阅读 · 0 评论 -
堆操作(优先队列)
这是一个堆的问题,就用stl里的优先队列完美搞掉 有两个序列 先sort一下 在算出最小的a[1]+b[1]…..a[1]+b[n]为一组 删掉+如a[i][j+1] 放进去 找最小的k个#include<cstdio>#include<map>#include<string>#include<iostream>#include<queue>#include<algorithm原创 2017-08-04 14:49:46 · 176 阅读 · 0 评论 -
关于二维偏序的题
简单的逆序对 可以用树状数组搞 就是插入时,找前面比他大的和 插入时弄一个桶,记下有多少个数 然后对后面的进行区间求和,这个可以用树状数组搞 最后求一个总和#include<iostream>#include<queue>#include<algorithm>#include<cstdio>using namespace std;int n,a[49999],sum[499999原创 2017-08-03 18:01:26 · 1378 阅读 · 2 评论 -
noip2013
day1 t1 转圈游戏(circle) 裸地快速幂。。#include<cstdio>using namespace std;int n,m,x,k;int fastpow(int a,int k){ int ans=1; while(k){ if(k&1) ans=(1ll*ans*a)%n; a=(1ll*a*a)%n;原创 2017-10-18 14:46:09 · 416 阅读 · 0 评论 -
dfs(tarjan)求lca
离线做法,可以做到o(n) 对于每一棵树,向下搜索,变成小树,如果子节点没有子节点了,就返回 然后在每一步中,找有x的查询,如果另一个访问过,就是他们的祖先 不同颜色的就是不同的子树 #include<cstdio>#include<iostream>using namespace std;const int M=1001009;int n,m,s,f[M],vis[M],lca[M原创 2017-10-16 15:58:52 · 259 阅读 · 0 评论 -
splay
背不过,抄了个板子#include<cstdio>#define ll long longusing namespace std;ll n,root,sz;struct tree{ ll ch[110000][3]; ll key[110000],size[190099],cnt[110000],f[110000]; inline void clear(ll x){原创 2017-12-20 17:11:34 · 160 阅读 · 0 评论 -
替罪羊树
打了个板子,之前没初始化wa了两个点 也不知道为什么会错。。。。。替罪羊树的主要思想就是将不平衡的树压成一个序列,然后暴力重构成一颗平衡的树. 这里的平衡指的是:对于某个 0.5<=alpha<=1 满足 size( lson(x) )<=alpha*size(x) 并且 size( rson(x) )<=alpha*size(x),即这个节点的两棵子树的 si...原创 2017-12-27 14:47:08 · 356 阅读 · 4 评论 -
树分治
转自:点这一.前言树分治就是在树形结构上进行分而治之的操作,包括点分治和边分治。①点分治的效率比较稳定,最坏情况下递归深度为O(logn)。②边分治在定点度数D为常数时,基于边的分治递归最坏深度为O(log N) ,然而D较大时会达到O(N),这种效率显然是不行的,不过可以通过添加虚点,使得每个节点的度数都不大于3,这样既可保证效率。二.点分治例题:POJ-1741题...转载 2018-02-27 17:22:05 · 204 阅读 · 0 评论 -
点分治
[POJ 1741] Tree 链接 树分治 云用两个指针统计#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>const int M=11000,INF=1e7;const char s1[8]={"AYE"};const char s2[...原创 2018-02-27 21:36:35 · 154 阅读 · 0 评论 -
lct
转自http://www.cnblogs.com/flashhu/p/8324551.htmlLCT(Link-Cut Tree),就是动态树的一种,用来维护一片森林的信息,滋磁的操作可多啦! 动态连边、删边 合并两棵树、分离一棵树(跟上面不是一毛一样吗) 动态维护连通性 维护每一条路径上的信息(最值,总和等) 所有平衡树滋磁的操作(其主体就是一大堆S...转载 2018-03-08 18:33:47 · 893 阅读 · 0 评论 -
主席书
主席书模板 支持查询区间第k大 有人说是权值线段树 有人说是可持久化线段树 还有人说是可持久化trie树#include<cstdio>#include<algorithm>using namespace std;const int M=1e6+7;struct zxtree{ int l,r,sum;}T[M<<5];int n...原创 2018-02-22 20:15:17 · 185 阅读 · 0 评论 -
KD_TREE总结
用途KD_TREE可以求K维空间最短/长两点的距离 或者前T长的距离,蒟蒻大概就知道这一点。。。思想把空间切割,完成缩短时间的半目的实现(建树,插入)怎样切割??? 用二叉树来实现,每一层按层数%K这一维切割 记录每一个子空间的状态就可以了,例如处理出每个空间每维的上限下限 然后合并子树的状态,插入类似复杂度就可以做到随机数据logN的复杂度,但毒瘤出题...原创 2019-06-12 21:21:24 · 241 阅读 · 0 评论