第一式:https://ac.nowcoder.com/acm/contest/143/I 题意: 有 n 个点,一个点集 S 是好的,当且仅当对于他的每个子集 T,存在一个右边无限长的矩形,使得这个矩形包含了 T,但是和 S-T 没有交   求这 n 个点里有几个好的点集1<=n<=10^5 1):当只选取1个点时,我们可以发现,任何一个点都满足题意. 2):当我们选取2个点时,我们可以发现如果要满足一个无限向右的矩形只框住一个点,当且仅当两个点的纵坐标不相同.因此,对于选2个点的总的方案数…
1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au,查询它有多少个祖先av满足av<=k/au. (1)dfs+线段树 #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm>…
4448: [Scoi2015]情报传递 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 588  Solved: 308[Submit][Status][Discuss] Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员口J-能有 若T名(可能没有)下线,除1名大头日外其余n-1名情报员有且仅有1名上线.奈特公司纪律森严,每 名情报员只能与自己的上.下线联系,同时,情报网络中仟意两名…
正题 题目链接:https://www.luogu.com.cn/problem/P5666 题目大意 给出\(n\)个点的一棵树,对于每条边割掉后两棵树重心编号和. \(1\leq T\leq 5,1\leq n\leq 299995\) 解题思路 编号和,所以应该是要我们枚举点然后求有多少条边割掉后它能当重心. 随便以一个点为根的话,对于一个点,割掉它子树外面的一条边,设割去的连通块大小为\(k\)那么需要满足,以及点\(x\)的最大子节点子树为\(f_x\) \[\left\{\begin…
题目:[模板]可持久化线段树 1(主席树) 不知道说啥. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; ,maxm=maxn; ,root[maxn],X,B[maxn],num=,L,R,ans,F[maxn]; inline int rd(){ ,f=;char c=getchar(); ; c=getchar(…
题目传送门 可持久化线段树1(主席树) 题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示序列的长度和查询的个数. 第二行包含N个正整数,表示这个序列各项的数字. 接下来M行每行包含三个整数 $l,r,k$ , 表示查询区间 $[l,r]$ 内的第k小值. 输出格式: 输出包含k行,每行1个正…
link 你谷的第一篇题解没用写LCT,然后没观察懂,但是自己YY了一种不用LCT的做法 我们考虑对于每个点,维护一个fa,代表以1为根时候这个点的父亲 再维护一个bel,由于一个颜色相同的段一定是一个深度递增的链,这个代表颜色段的链顶 再维护一个ans,就是ans 那么第二个操作就是ans单点查询,第三个就是ans区间最大值 第一个操作,我们树剖把它变成了log条重链,在重链上的点的bel和ans可以区间修改 但是重链上每个点的儿子就说gg了 这些儿子的子树减去的是他们的各自bel的fa的点权…
[模板]可持久化线段树 1(主席树) https://www.luogu.org/problemnew/show/P3834 主席树支持历史查询,空间复杂度为O(nlogn),需要动态开点 本题用一个类似于前缀和的思想,离散化之后 用主席树维护每一个前缀的“桶”数组 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define MAXN 200020 ],rc[M…
题目传送门:1036: [ZJOI2008]树的统计Count 这道题是我第一次打树剖的板子,虽然代码有点长,但是“打起来很爽”,而且整道题只花了不到1.5h+,还是一遍过样例!一次提交AC!(难道前天膜cyc神犇真的起作用了?) 按捺不住激动的心情!!! 这道题是树剖+线段树模板题,树剖把树转化成线段后就可以单点修改+区间求和/区间求max了. 又臭又长的93行代码: #include<cstdio> #include<cstdlib> #include<cstring&g…
正解:线段树/珂朵莉树 解题报告: 传送门$w$ 本来是想写线段树的,,,然后神仙$tt$跟我港可以用珂朵莉所以决定顺便学下珂朵莉趴$QwQ$ 还是先写线段树做法$QwQ$? 操作一二三四都很$easy$?维护下区间内01个数然后翻转就打$tag$,除了有点儿麻烦还是挺$easy$的鸭$QwQ$,顺便强调下顺序?就如果区间覆盖就可以直接把翻转删了,区间翻转的时候不用管覆盖,每次下放先覆盖后翻转,$over$ 说下操作五$QwQ$,就再维护几个东西$QwQ$ 就,维护下区间内最长的连续的1的个数,…
LINK:字符串树 先说比较简单的正解.由于我没有从最简单的考虑答案的角度思考 所以... 下次还需要把所有角度都考察到. 求x~y的答案 考虑 求x~根+y~根-2*lca~根的答案. 那么问题变成了 求某个点到根的边有多少条是以当前询问为前缀的. 前缀这个问题容易想到trie树 建立前缀trie树 即 可持久化trie树即可. 还有两种考虑问题的角度. 可以直接对边建立trie树 让询问在上面跑到一个节点 那么 我们问题变成了求某个节点内的终止节点在x~y的路径上的个数. 把点赋上点权 那么…
Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ymx.yxh 都去打了,可我似乎那时候还在旅游? 不难发现,对于操作 \(i\) 实际上是将 \(a_i\) 与 \(b_i\) 子树的并集内的点的答案集合并上 \(a_i\) 与 \(b_i\) 子树的并集.于是我们考虑将询问离线下来并在树上进行一遍 DFS,动态地维护一个可重集 \(S\).当我们第一次访问…
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B…
http://acm.hdu.edu.cn/showproblem.php?pid=4417 Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2720    Accepted Submission(s): 1322 Problem Description Mario is world-famous plumber…
orzYCB 虚树 %自为风月马前卒巨佬% 用于优化一类树形DP问题. 当状态转移只和树中的某些关键点有关的时候,我们把这些点和它们两两之间的LCA弄出来,以点的祖孙关系连成一棵新的树,这就是虚树. 容易证明,如果关键点数量为\(m\),则虚树点数不超过\(2m\). 虚树的构建 dfs原树,对点进行dfn标号,并将关键点按dfn从小到大排序. 搞个栈,栈内的点满足:都在从栈顶的点到原树的根的一条链上. 现在我们准备加入一个点\(x\) 直接加可能破坏一条链的性质,于是把栈顶的元素弹掉直到可以加…
众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. B树 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度.普遍运用在…
题意:给n个数,m次询问,每次询问L到R中第k小的数是哪个 算法1:划分树 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; ; ][mx]; int sortt[mx]; ][mx]; void build(int l,int r,int c) { if (l==r) return ; ; ; ; for (int i…
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成. 出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced…
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成. 出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced…
这两道题实际上考试的时候是一道题OwO 太可怕了,忙了我三个多小时,写了整整7K 这个题两个询问关联性不强,所以分开来考虑 QAQ的LIS树 考虑如何用dp求解答案 设dp(v)表示v到根的修改后的序列的和,c(v)是v点点权 那么v的答案就是dp(v)减去v到根的点权和 最直观的想法是我们从v点向上暴力跳父亲,跳到第一个不用修改的点u 不难发现因为u没有修改,所以之后的序列和u之后的序列是完全一样的 可以直接转移给v了,那么dp(v)的值就是dp(u)和v->u的序列和了 注意到v->u的所…
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成. 出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced…
  作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成. 出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree…
YEAH!我也是一个AC主席树模板的人了! 其实是个半吊子 我将尽量详细的讲出我的想法. 主席树太难,我们先搞普通线段树好了 普通线段树怎么做?我的想法是查询K次最小值,每次查完把查的数改成INF,查完再改回来... MDZZ 于是就有了主席树. 先不考虑主席树,我们来考虑一个奇特的线段树. 一般的线段树,数列位置是下标,而把数列维护值作为线段树中存的元素. 那我们如果反过来,把数列元素当做线段树的下标...??? 比如说数列[4 2 3 1] 如果线段树的下标是1.2.3.4......? 那…
Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找.前缀匹配等中应用很广泛,其高效率是以空间为代价的. 一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度. 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总共有26个英文字母(假设单词都是小写字母组成). 则可声明包含Trie树的结点信息的结构体: #define MAX 26 typedef struct TrieNode //Trie结…
概述 哈夫曼树:树的带权路径长度达到最小. 构造规则 1. 将w1.w2.-,wn看成是有n 棵树的森林(每棵树仅有一个结点): 2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左.右子树,且新树的根结点权值为其左.右子树根结点权值之和: 3. 从森林中删除选取的两棵树,并将新树加入森林: 4. 重复(02).(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树. 基本操作 定义 1 权值 2 左孩子 3 右孩子 4 父节点 构造哈夫曼树(使用最小堆) 1 构造最小堆…
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp80 B树及B+树 一.B树 1.B树的定义    B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件:    (1)每个结点至多有m个子结点:    (2)除根结点和叶结点外,其它每个结点至少有 个子结点:    (3)若根结点不是叶子结点,则至少有两个子结点:    (4)所有的叶结点在同一层:    (5)有k个子结点的非根结点恰好包含k-1个关键码.…
树的直径 定义:树中最远的两个节点之间的距离被称为树的直径.  怎么求呢?有两种官方的算法(不要问官方指谁我也不晓得): 1.两次搜索.首先任选一个点,从它开始搜索,找到离它最远的节点x.然后从x开始搜索,找到离x最远的点y,那 么E(x, y)的长度就是树的直径.时间复杂度为O(n). 2.树形dp.这种其实更好写.我们可以对于某个节点x,分别求出经过它的最长链的长度.怎么求呢?首先,枚举x 所连接的k个节点yi(i ∈[1,k]),都求出以yi为根的子树最大深度d[yi].那么,经过x的最长…
考虑这样一个问题:一棵树初始全是白点,有两种操作:把一个点染黑:询问某点到所有黑点的距离之和. 注意到树上两点x和y的距离为depth[x]+depth[y]-depth[lca(x,y)]*2.要求出上面的东西,depth[x]+depth[y]可以很简单的算出来,关键在于depth[lca(x,y)].这一部分实质上是x到根的路径和y到根的路径重合的部分.那么我们可以树剖,在修改的时候,把该点到根的路径全部+1(其实是1单位,具体到每个点是其到父亲的那条边的长度),查询时查这个点到根的权值和…
在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehaviorTree2 = BTBehaviorTree:New(); local this = TestBehaviorTree2; this.name = "TestBehaviorTree2"; function this:New() local o = {}; setmetatable(o…
6.5 Huffman 树 Huffman 树又称最优树,可以用来构造最优编码,用于信息传输.数据压缩等方面,是一类有着广泛应用的二叉树. 6.5.1 二叉编码树 在计算机系统中,符号数据在处理之前首先需要对符号进行二进制编码.例如,在计算机中使用的英文字符的 ASCII 编码就是 8 位二进制编码,由于 ASCII 码使用固定长度的二进制位表示字符,因此 ASCII 码是一种定长编码.为了缩短数据编码长度,可以采用不定长编码.其基本思想是:给使用频度较高的字符编较短的编码,这是数据压缩技术的最…