随笔分类 -  -----数据结构 5.主席树

摘要:题目链接:Codeforces Round #433 (Div. 2) E. Boredom 题意: 在一个n*n的二维平面上,有n个标记,每列只有一个标记。 现在定义美丽的矩形为以两个标记所在位置构成的矩形。 现在有q个询问,每次询问一个矩形,问有多少个美丽的矩形与询问的矩形相交。 题解: 先用建 阅读全文
posted @ 2017-09-07 15:14 bin_gege 阅读(432) 评论(0) 推荐(0)
摘要:题目链接:hdu 6191 Query on A Tree 题意: 给你一棵树,每个节点有一个值,现在有q个询问,每个询问 询问一个u x,问以u为根的子树中,找一个节点,使得这个节点的值与x异或的值最大,输出那个最大的值。 题解: dfs序和一棵可持久化字典树就搞定了。 1 #include<bi 阅读全文
posted @ 2017-09-01 11:41 bin_gege 阅读(171) 评论(0) 推荐(0)
摘要:题目链接:hdu 6162 Ch’s gift 题意: 给你一棵树,树上每个点有一个权值,现在有m个询问,每次询问给你一个s,t,L,R,问你从s到t的路径上,权值在[L,R]内的总和为多少。 题解: 我感觉我写复杂了,用树链剖分来维护路径,然后用主席树来建立权值线段树乱搞。 1 #include< 阅读全文
posted @ 2017-08-22 18:50 bin_gege 阅读(330) 评论(0) 推荐(0)
摘要:题目链接:hdu 5820 Lights 题意: 给定一个网格图,上面有 N个灯 求任意两个灯之间,是否至少存在一条曼哈顿最短路径 使得路径上的每一个拐点都有一个灯。 题解: 我们可以对每个点将非法的区域找出来,然后看看这个区域内有没有点,然后就有如下的做法: 这里要从左往右和从右往左都扫一遍,这样 阅读全文
posted @ 2017-07-21 14:39 bin_gege 阅读(260) 评论(0) 推荐(0)
摘要:题目链接:bzoj 4026 dC Loves Number Theory 题意: 给你n个数,有q个询问,每次问你一个区间乘积的欧拉函数。 强制在线。 题解: 由欧拉函数性质: euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2… 阅读全文
posted @ 2017-07-13 15:02 bin_gege 阅读(131) 评论(0) 推荐(0)
摘要:题目链接:codechef Xor Queries 题意: 题解: 一棵可持久化字典树就行了。 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 using namespace std; 4 5 cons 阅读全文
posted @ 2017-07-10 18:18 bin_gege 阅读(186) 评论(0) 推荐(0)
摘要:题目链接:hdu 4348 To the moon 题意: 给你n个数,有m个操作。 1.给区间[l,r]的所有数+d,并且时间戳+1 2.询问当前时间戳的区间和。 3.询问过去时间戳t的区间和。 4.退回到时间戳t。 题解: 直接上主席树。 不过区间操作的时候push_down空间似乎不是那么够用 阅读全文
posted @ 2017-07-07 20:51 bin_gege 阅读(171) 评论(0) 推荐(0)
摘要:题目链接:Educational Codeforces Round 22 E. Army Creation 题意: 给你n个数和一个数k,然后有q个询问. 每个询问 有一个区间[l,r],问你这个区间内在满足每一种数不超过k的情况下,最大能选多少个数出来。 强制在线。 题解: 一看就要用到主席树,和 阅读全文
posted @ 2017-07-06 17:45 bin_gege 阅读(251) 评论(0) 推荐(0)
摘要:题目链接:Codeforces Round #406 (Div. 2) E. Till I Collapse 题意: 给你n个数,对于每一个k(1<=k<=n),划分区间,每个区间只能有k个不同的数字, 问最小的划分区间的个数。 题解: 用主席树倒着将数插入,对于每个区间询问第k个不同数的位置就行了 阅读全文
posted @ 2017-05-23 17:37 bin_gege 阅读(276) 评论(0) 推荐(0)
摘要:题目链接:hdu_5919_Sequence II 题意: 给你n个数,m个询问,每次问你一个区间中每一种数在区间中第一次出现的位置的中位数,强制在线。 题解: 一看就是主席树搞,不过这里要询问第一次出现的位置,有个技巧就是倒着将数插进去,如果有相同的数,就把位置靠后的数的贡献取消掉,这样查询的时候 阅读全文
posted @ 2016-10-25 21:50 bin_gege 阅读(132) 评论(0) 推荐(0)
摘要:题目链接:hdu_5790_Prefix 题意: 给你n个字符串,字符串总长度不超过10W,然后给你一个区间,问你这个区间的字符串不相同的前缀有多少个。 题解: 由于z与上一个答案有关,所以强制在线,区间询问可以用主席树搞搞。 不同前缀的话,我们可以用一个trie来记录每一个节点的最晚出现时间,也就 阅读全文
posted @ 2016-10-13 19:19 bin_gege 阅读(155) 评论(0) 推荐(0)
摘要:题目链接:hdu_5788_Level Up 题意: 有一棵树,n个节点,每个节点有个能力值A[i],mid[i],mid的值为第i节点的子树的中位数(包括本身),现在让你将其中的一个节点的A值改为1e5,问所有的mid的和最大问多少。 题解: 我们可以知道,如果改变其中一个的A[i],如果A[i] 阅读全文
posted @ 2016-10-05 22:13 bin_gege 阅读(223) 评论(0) 推荐(0)
摘要:题目链接:hdu_4417_Super Mario 题意: 给你n个树,有m个询问,每个询问有一个区间和一个k,问你这个区间内不大于k的数有多少个。 题解: 考虑用主席树的话就比较裸,当然也可以用其他的写 1 #include<bits/stdc++.h> 2 #define F(i,a,b) fo 阅读全文
posted @ 2016-10-03 23:24 bin_gege 阅读(153) 评论(0) 推荐(0)
摘要:题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2665 题意:给你一个区间,让你找这个区间第K大的数 题解:主席树模版题,也可以用划分树 1 #include<cstdio> 2 #include<vector> 3 #include<algorith 阅读全文
posted @ 2016-05-21 11:53 bin_gege 阅读(142) 评论(0) 推荐(0)