
主席树
Mr.Gzj
这个作者很懒,什么都没留下…
展开
-
2019 杭电多校 HDU - 6621 K-th Closest Distance 主席树+二分
题意:n个数,q次查询,查询[l , r] 内, | a[i] - p | 第k大的数。 思路:主席树维护权值,要求|a[i]-p|的第k大,可以二分答案,若区间[l,r]内的数在范围[p-ans,p+ans]的数等于k,则ans就是答案,所以二分答案求出来,复杂度O(q*log(m)*log(m))。 #include<bits/stdc++.h> using namespac...原创 2019-08-02 18:10:17 · 149 阅读 · 0 评论 -
2019暑假牛客多校赛第九场H.Cutting Bamboos (主席树+二分)
题意: 有n条柱子,高度为aia_iai ,我们有qqq次操作。在l到r的范围内砍yyy次,将所有的树高都砍为0,但是保证每一刀砍出来的长度(砍除树高于该高度的和)都是相同的。问你第xxx次砍的时候砍的高度在哪里。有精度误差。每次只对本次操作有影响,操作完后,树回到原来的高度。 思路: 在求之前,我们先要知道每次可以砍多少,总的树高除于y就是每砍一次的后少的长度,然后砍到第x次时剩下的树高就是总...原创 2019-08-16 22:44:19 · 299 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Nanjing 2019 The beautiful values of the palace(主席树)
题意: 给定一个n∗nn*nn∗n的螺旋矩阵,给mmm个点,使这个矩阵里只有这mmm个点的值是他们的值,别的值都是0。给qqq个询问,每次给一个矩阵,求矩阵里数字之和。 思路: 求出这mmm个点的值,然后对yyy坐标离散化,然后对xxx从小到大排序,按xxx的大小插入主席树,主席树记录的是前缀和,由于主席树每个节点都是一颗线段树,所以可以在查询区间大小时,只要查询离散化后的lxlxlx到rxrxr...原创 2019-09-01 22:34:23 · 352 阅读 · 0 评论 -
HDU 6278 Just h-index(主席树求比x大的数的个数)
题意: 给定一个长度为nnn的序列,和qqq个询问,求每个询问[l,r][l,r][l,r]中最大的hhh,满足该区间内至少有hhh个数的值大于hhh。 思路: 二分hhh,求比hhh大的数的个数。也可以二分后求区间第mmm小的数与mmm比较。 #include <bits/stdc++.h> #define ll long long using namespace std; cons...原创 2019-09-04 16:01:48 · 241 阅读 · 0 评论 -
CF961E(主席树)
题意: 给出一串数字序列,寻找像ai>j,aj>ia_i>j,a_j>iai>j,aj>i这种数字对的数量。 思路: 根据题意可以列出∑i=1n−1∑j=i+1n[ai≥j][aj≥i]\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}[a_i \geq j][a_j \geq i]∑i=1n−1∑j=i+1n...原创 2019-09-04 22:44:07 · 238 阅读 · 0 评论 -
CF1000F One Occurrence(主席树求区间只出现一次的数)
题意: 给定nnn个数,qqq次查询,每次查询给出[l,r][l,r][l,r],查询这个区间内只出现一次的数。 思路: 用preprepre数组记录每个数在数组前一次出现的位置,初始化为0,只要在[l,r][l,r][l,r]内出现的数的pre[a[i]]<lpre[a[i]]<lpre[a[i]]<l就是有解的。所以可以用主席树维护最小值和当前位置,当pre[...原创 2019-09-05 19:53:59 · 1048 阅读 · 1 评论 -
P3567 [POI2014]KUR-Couriers (主席树查询区间数大于一半的数)
题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 思路:主席树模板 #include<bits/stdc++.h> #define ll long long using namespace std; const int N = 5e5 + 10; int n, m, a[N], root[N], cnt; struct node { int l, r, num;...原创 2019-09-05 21:22:18 · 255 阅读 · 0 评论 -
P3157 [CQOI2011]动态逆序对 (树套树/树状数组套主席树)
题意:动态计算逆序对,给出n,m,n是数组大小,m是删的数的个数,要求每次删完数后剩下的逆序对个数。 思路:若普通主席树的话,每次删一个数,则要更新后面n个数的大小,复杂度nlogn,直接爆炸,所以考虑一种可以单点修改和区间查询的数据结构,线段树或树状数组都可以,不过显然树状数组好写,所以用树状数组来代替主席树的root数组,求出总的逆序对后,每次删除一个数m就减去从1到m-1求大于m的数的个数...原创 2019-09-26 23:42:43 · 193 阅读 · 0 评论