主席树
!
fffefw
这个作者很懒,什么都没留下…
展开
-
Count on a tree SPOJ - COT (树上第k小)
#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;struct node{ int ls,rs,sum; node(int ls=0,int rs=0,int sum=0) { this->ls=ls;this->rs=rs;this->s...原创 2019-05-07 15:51:24 · 157 阅读 · 1 评论 -
P3834 【模板】可持久化线段树 (静态主席树)
主席树查找和更新时时间空间复杂度均为O(logn),建树2*nlogn, 且空间复杂度约为O(nlogn + nlogn)前者为空树的空间复杂度,后者为更新n次的空间复杂度#include<bits/stdc++.h>using namespace std;const int maxn=2e5+10;int a[maxn],v[maxn],rt[maxn],tot,n...原创 2019-04-30 17:56:05 · 113 阅读 · 1 评论 -
P2617 Dynamic Rankings(动态区间主席树)
写法①动态的区间主席树就是利用了树状数组的思想,对树状数组的每个节点都开了一颗权值线段树,比如说i位置开的权值线段树维护的是i-lowbit(i)+1到i这个区间的信息。更新操作,假如更新i位置的值,如果是静态主席树那样i位置的权值线段树维护的是1到i的信息,那么就要把i到n位置的权值线段树都更新一遍,单次更新复杂度是nlog(n+m),动态主席树的话只需要把维护区间包含i位置的节点对应的...原创 2019-05-24 12:43:17 · 235 阅读 · 0 评论 -
求区间不同数字的个数和和
1 Byte = 8 Bit1 KB = 1,024 Bytes1 MB = 1,024 KB = 1,048,576 Bytes一个int是4字节即4Byte.求个数和求和类似,不过是在更新的时候把1变成了这个数的值,下面就讲讲求区间不同数字的个数。首先我们思考对于右端点固定的区间(即R确定的区间),我们如何使用线段树来解决这个问题。我们可以记录每个数字最后一次出现的位置。比...原创 2019-07-16 12:46:52 · 2051 阅读 · 2 评论 -
2019 Multi-University Training Contest 4 K-th Closest Distance(二分+主席树)
题意:给你n个数和q次查询,查询[l , r] 内, | a[i] - p | 第k小的数思路:二分答案,check的话就判断[l , r]区间内,[p-mid,p+mid]区间内数的个数和k的关系,若大于,则往左半边找,若小于则往右半边找#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;c...原创 2019-07-31 20:47:36 · 125 阅读 · 2 评论