![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
主席树
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
C 攀登山峰 2020计蒜之道决赛
https://nanti.jisuanke.com/t/49111没想到这个t<=20怎么用。。。因为t<=20,那么l,r这一区间最多只有t个位置能够数量>=v=(r-l+1)/t+1,也就是说直接上主席树,如果当前区间的数字总数<v就直接return,那么每次查询就最多向下跑t条链,复杂度是O(Mtlogn)的#include<bits/stdc++.h>using namespace std;const int maxl=1e5+10;in原创 2020-10-27 21:59:59 · 191 阅读 · 0 评论 -
洛谷P4755 Beautiful Pair 笛卡尔树上启发式合并 主席树计数
https://www.luogu.com.cn/problem/P4755这题思路挺简单的,写起来有一点长对整个序列构建笛卡尔树,每个节点大于他的左子树和右子树的所有值,那么就可以对笛卡尔树进行dfs,回溯时启发式合并两个子树,根节点就是最大值,枚举小的那边每个位置a[i],计算出每一个位置所能够接受的a[j]的上限,然后用主席树去另一个区间求区间内满足1-a[j]上限的个数,就是跨过a[u]并以a[u]为最大值的美丽的数对的数量#include<bits/stdc++.h>u原创 2020-08-08 21:27:06 · 264 阅读 · 0 评论 -
codeforces1261 B2. Optimal Subsequences (Hard Version)
https://codeforces.com/problemset/problem/1261/B2先对原数组排序,先按数字大小从大到小,再按下标从小到大。对于每个询问k,选择每个数字哪几种肯定是确定了,只是顺序不确定而已,那么如果按下标从小到大排,对于相同数字只拿一部分的情况,就能贪心得选择下标较小的那部分。那么要求第pos个的位置,就是求排了序后前k个下标中第pos小的是谁就行了,很...原创 2019-11-24 22:09:11 · 309 阅读 · 0 评论 -
H Cutting Bamboos 2019牛客多校第9场
传送门:https://ac.nowcoder.com/acm/contest/889/H这题主席树板题竟然只过了这么点人。。。我们算出从1-x次cut,需要切掉的竹子总长度是多少,然后二分答案mid,看大于mid 的竹子有多少,已经从mid切下去能切出总共多少长度的竹子。以权值为下标,每个点存储竹子个数和长度总和的主席树就每个跟节点rt[i]代表 1--i的竹子的情况。然后每次二...原创 2019-08-15 20:33:16 · 251 阅读 · 2 评论 -
hdu 6621 K-th Closest Distance 杭电多校第4场
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6621队友一上来分块RE了一发,搞得我也想分块,结果lts一声主席树,然后就发现是主席树板题了。。。直接权值主席树,下标表示值,记录的sum表示当前值的个数就行了,然后二分答案,得到上下界,用rt[r]-rt[l-1]去找就行了。#include<bits/stdc++.h>#...原创 2019-07-31 19:03:44 · 272 阅读 · 0 评论 -
hdu6601 2019杭电多校第二场 Keen On Everything But Triangle
看到可以离线询问区间,瞬间写莫队,后来偷听到学弟说只要记录最大的30个,我思考了一蛤,发现应该是最大的50个,然后继续莫队,结果一直超时,还想了好多办法优化常数,竟然没想到主席树区间求第k大枚举区间最大的50个。。。。卧槽我今天讲课内容才给学弟们讲过主席树啊。。。。其实最难的想法还是枚举三角形时,对边排序,然后从长到端枚举,假设有 a<=b<=c<=d.如果b+c>d ...原创 2019-07-26 00:37:56 · 394 阅读 · 2 评论 -
HDU - 5919
一万年前抄的代码,今天复习一蛤主席树,这题又不会了这题是求一段区间中每个数字出现的第一次的位置是在哪直接正着做的话要二分一蛤位置,题解都说过不去所以学习了神奇的做法,倒着加链,这题不是求,每个节点存从rt位置开始在那个区间有多少个第一次出现的数字,那么求l-r中的就是从rt[l]下去求一蛤l-r中第一次的数字总数k,然后(k+1)/2下去找。#include<bits/st...原创 2018-10-09 22:28:44 · 288 阅读 · 0 评论 -
HDU 6278
上半年湘潭的C题,当时因为太菜了忘记了主席树,于是用莫队二分树状数组水过去了n(sqrt(n)logn+log^2n)的复杂度,现在用主席树就是nlog^2n的复杂度,结果也用了1.1s,当时肯定是因为数据水,没卡莫队到nsqrt(n)所以3s水过去了。把权值主席树,二分一下答案,然后就记录一蛤从>=mid的地方到nn在L到R区间有多少个数字就行了,主席树裸题。#include&l...原创 2018-10-11 19:32:26 · 259 阅读 · 0 评论 -
bzoj1901zoj2112
bzoj1901听说不用建静态主席树,可以直接当树状数组添加也不会爆内存,然而并没有权限号。由于zoj2112的n有5*1e5所以不能一开始就nlognlogn的空间丢进去,不然会炸,需要建一颗nlogn空间的静态线段树,然后再mlognlogn的跟新,这样就不会爆数组。静态开一个rt1[maxl],动态开一个rt2[maxl]因为是要动态修改的区间第k大,把主席树当树状数组来看待,要求l到r原创 2017-11-12 16:17:36 · 299 阅读 · 0 评论 -
HDU4348
自己一开始yy的只要是建新树的时候用lazytag,然后tag不往子节点传,而是到这里就新生成2个子节点。然而这样会TLE,我也不知道为什么。然后我加了个小优化,从lastnode[tm]表示到tm为止的节点数,然后回到tm时,tot=lastnode[tm]+1;然而并没卵用,TLE主席树的数组开太大又会MLE。。。。后来上网学习了一波神奇姿势。tag就记着放那里不要传递,在求和原创 2017-10-25 15:59:17 · 448 阅读 · 0 评论