![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Ghostkkkk
这个作者很懒,什么都没留下…
展开
-
牛客网暑期ACM多校训练营(第一场)J——Different Integers 区间不同数
题意:给你一个n个数的数列和q次询问l, r,需要回答a[1]...a[l], a[r]...a[n]的不同数的个数。n,q <=1e5,a[i] <= n题解:用莫队的写法比较简单,这里不再多说。说一下树状数组的写法。普通的求区间不同数可以用离线树状数组,方法是按查询的r从小到大排序, 然后遍历整个数组,用树状数组记录这个值目前为止最后出现的位置,在这个位置加一,...原创 2018-07-20 12:51:37 · 295 阅读 · 0 评论 -
HDU 6305 RMQ Similar Sequence 笛卡尔树
题意:给你一个序列a, 定义RMQ(A,l,r) 为A序列 l到r中最大值的最小位置i。RMQ相似即 对于A,B两个序列,使得任意l ,r , RMQ(A,l,r)= RMQ(B,l,r)现在B序列元素的值均在[0,1]随机。如果B与A RMQ相似,则B的重量为B元素的和,否则为0。求B的期望重量。题解:笛卡尔树 正好可以代表任意的RMQ(A,l,r)。对每个节点,都求...原创 2018-07-27 15:57:03 · 216 阅读 · 0 评论 -
HDU - 6393 Traffic Network in Numazu 树链剖分 基环树
Problem DescriptionChika is elected mayor of Numazu. She needs to manage the traffic in this city. To manage the traffic is too hard for her. So she needs your help. You are given the map of the ci...原创 2018-08-14 20:28:47 · 336 阅读 · 0 评论 -
HDU - 6430 TeaTree 启发式合并
题意给你一个树,每个点有个权值v[i]。每两个点i, j会告诉他们的LCA一个值gcd(v[i], v[j])。现在问每个点所听到的最大的值。n <= 1e5, v[i] <= 1e5题解树上启发式合并。对于每个节点,用set记录它的子树存在哪些因子, 取所有出现两次的因子的max。要求出这个set,我们对于它所有的儿子的set,看哪个大,每次把小的一个...原创 2018-08-22 22:41:56 · 218 阅读 · 0 评论 -
935F - Fafa and Array 线段树 分类讨论
题目链接:http://codeforces.com/contest/935/problem/F题意有一个长度为n的数组A,定义函数F(A)为。现在有q次操作。1.l r x代表输出如果在[l, r] 中找一个数加上x之后的F(A)的最大值。2.l r x代表[l, r] 区间增加x。题解我们用d[i]记录a[i + 1] - a[i] ,ans代表当前的F(A)。...原创 2018-08-25 20:46:25 · 197 阅读 · 0 评论 -
CF 965E Short Code 贪心 字典树 启发式合并
题意:给你N个字符串,每个字符串可以缩写为他的前缀,但是必须保证所有串缩写后不重复,并且最后总长度最小。题解:先建立字典树,然后我们可以想到,在dfs的时候,如果当前节点本来没有串,那么他可以存他子树中某个串,我们用优先队列找到他子树的最长的节点,然后把这个节点代表的串用当前节点串代替,这样贪心即可。但是对于每颗子树都要建立一个优先队列存他子树中所有的串长。对于这点我们可以用启发式...原创 2018-09-06 21:35:30 · 159 阅读 · 0 评论 -
CF 888G - Xor-MST 分治 贪心 字典树 启发式合并
题意:给你一个n个数,每两个数之间边的权值是a[i] ^ a[j]。问最小生成树大小。题解:最小生成树可以用kruskal思想。(其实应该是Boruvka算法,这里记录一下)每次选择最小的边。我们建立一颗01字典树,那么很明显对于一颗子树内的点,他肯定也是连这个子树内的点最好,然后每个子树就会构成一个联通块,去连一条最小的边到兄弟子树,如此递归。相当于每次把两颗子树合并...原创 2018-09-17 21:35:39 · 288 阅读 · 0 评论 -
CF 1000F - One Occurrence 线段树 离线处理 区间出现一次的数
http://codeforces.com/contest/1000/problem/F题意:给你一个数组,有Q次询问,每次询问需要回答一个[L, R]中只出现一次的数,没有则输出0。题解:线段树,离线处理。把询问按照r从小到大排序。然后扫整个数组,对于每个i,我们把pre[a[i]]插到线段树的i中,同时把线段树中pre[a[i]]设为INF。然后区间查询[q[i]....原创 2018-09-07 18:42:09 · 331 阅读 · 0 评论 -
CF 960F - Pathwalks 线段树动态开点优化DP
http://codeforces.com/problemset/problem/960/F题意:略。题解:每个点一个线段树,来优化DP。用线段树动态开点。然而这里学到了一个技巧:用map数组模拟二维数组,达到动态开点的效果,然后用树状数组求1-n最大值即可。复杂度,也可以用unordered_map加速。代码:#include <bits/stdc++...原创 2018-10-16 15:11:44 · 187 阅读 · 0 评论