![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
主席树
wtcl
这个作者很懒,什么都没留下…
展开
-
Prefix HDU - 5790(主席树)
思路: 给每个前缀一个编号,就可以转化为求给定区间的不同数的个数。 参考:https://blog.csdn.net/weixin_45113721/article/details/105420604 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=2e5+10;//要开两倍(+1 和 -原创 2020-06-25 22:53:34 · 84 阅读 · 0 评论 -
SP3267 DQUERY - D-query(莫队/主席树)
讲解:https://www.cnblogs.com/WAMonster/p/10118934.html #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define maxn 1010000 #define maxb 1010 using namespa...原创 2020-04-09 21:32:41 · 187 阅读 · 0 评论 -
Shooting HDU - 4866(主席树+离散化+差分)
题目:https://vjudge.net/problem/HDU-4866 题意:给定n个区间(l,r),权值是d(为区间的纵坐标)。有m次询问,每次给定x(横坐标),a,b,c 。 k=(pre*a+b)%c,求距离x最近的k个距离的权值和(当x上方的区间小于k时,答案加上(k-x)*上方的区间最大的权值)。(结合图片会很清楚) 思路: 题意简单来说就是求x上方的前k个区间。 把权值d离散化,以横坐标i为root[i]建立主席树。 考虑如何将区间插入主席树,可以运用差分的思想,对于(l,r,d) roo原创 2020-06-25 15:02:28 · 133 阅读 · 0 评论 -
Level Up HDU - 5788(主席树+树状数组+dfs序)
题目:https://vjudge.net/problem/HDU-5788 题意:给定一颗树,每个点都有权值(1是根节点)mid[i]是以i为根节点的子树的所有节点的权值的中位数。选择一个节点使其权值变为100000(树上节点的权值都不大于100000)使得mid[i]之和最大,输出最大的和。 思路: 1.如果选择某一个节点,只会影响它本身还有祖先节点的mid值,而且只有在该节点的权值小于等于祖先节点的权值是才会将祖先节点的中位数变成中位数的下一位。求出每个节点的curmid和nextmid(中位数和中位原创 2020-06-24 22:45:17 · 109 阅读 · 0 评论 -
SPOJ - COT(主席树 LCA)
#include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define ll long long const int N=1e5+10; int h[N],e[N*2],n...原创 2020-04-09 13:47:50 · 196 阅读 · 0 评论 -
第K小数(主席树)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> const int N=1e5+10; int a[N]; using namespace std; vector<int> v; int fin...原创 2020-04-09 10:31:30 · 116 阅读 · 0 评论