主席树
ws_yzy
一如OI情似海
展开
-
BZOJ 3524: [Poi2014]Couriers|主席树
做这个题唯一收获的是一个巨大的bug 此代码自带巨大bug #include #include #include #include #include #include #include #include #include #include #define T 9822222 #define lowbit(x) (x&(-x)) using namespace std; int sc() {原创 2016-01-14 09:43:55 · 615 阅读 · 1 评论 -
BZOJ 2588: Spoj 10628. Count on a tree|主席树
用主席树维护这个点到根上的数,然后Lca上的数单独处理!!!!!!!!!#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<vector> #include<set> #include<map> #include<iostream> #include<algorit原创 2016-02-19 18:46:59 · 539 阅读 · 0 评论 -
BZOJ 3207: 花神的嘲讽计划Ⅰ|莫队|主席树|hash
本来以为会卡主席树内存,然后写了莫队T到死,发现想多了…… 然而这题并不卡内存,直接主席树做就好了。 先给长度为K的序列hash一下然后就变成了询问一个区间内有没有某一个数,我离散化了一下,然后改成主席树发现又T到死……woc…终于发现二分查找有鬼.. 然后就发现似乎莫队和主席树的二分都是一样的都有鬼..改了一下发现都能过,而且,而且莫队比主席树要快!!!!!!!!!! 发现主席树似乎并不需原创 2016-02-20 09:31:04 · 733 阅读 · 0 评论 -
BZOJ 3123: [Sdoi2013]森林|主席树|启发式合并
做法和2588一模一样,只不过多了个合并操作,所谓的启发式合并,就是永远都把小的往大的上合并,然后合并的时候暴力就行了. 因为查询的时候忘记减去左区间的数量,RE的根本停不下来….#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<vector> #include原创 2016-02-20 14:59:39 · 855 阅读 · 0 评论 -
BZOJ 2653: middle|主席树
这题思路确实比较难想!建主席树也是非常的特别! 考虑二分答案,如果当前check的答案是xx那么大于等于xx的数的贡献是1,其余的贡献是-1,然后就判断一下是否存在总贡献>=00的区间,判断的话需要对所有的数建立一个线段树,然后直接建会MLE+TLE,然后就需要我们的黑科技可持久化的数据结构主席树,先把所有的位置都设为1,然后把数排序后从小到大建树每次-1。 非常神的建树方式,从小到大插入数,插原创 2016-02-20 21:39:41 · 491 阅读 · 0 评论 -
BZOJ 3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版|主席树
用主席树实现可持久化树组(好高端的一个名字)。。 其实就是非常简单的东西,传统的可以对每一次操作都建立一个fa数组实现可持久化,但是这样会TLE+MLE,然后我们发现每次操作只会对于上一次改变很少的一部分,大部分可以沿用上一次操作的数组,这就出现了我们的黑科技——主席树,用它来实现,用它来维护每一个点的fafa,初始时建树fa[i]=ifa[i]=i,然后不断更新就可以了。 对于3673据说不用原创 2016-02-23 08:56:47 · 592 阅读 · 0 评论 -
4448: [Scoi2015]情报传递|主席树|离线操作
可以把所有的操作离线,然后树链剖分将所有人搜集情报的时间加入到主席树中,查询的时候可以直接查询搜集情报时间≤i−C[i]−1\leq i-C[i]-1的人的个数 时间复杂度n∗log22nn*log_{2}^2n,空间复杂度n∗log2nn*log_{2}n#include<algorithm> #include<iostream> #include<cstdlib> #include<cstri原创 2016-03-22 07:48:50 · 1551 阅读 · 0 评论 -
4408: [Fj Winter Camp 2016]神秘数&&4299: Codechef FRBSUM|主席树
好神的一道题! 很容易发现假如已经构造出来了1,2...max1,2...max再插入一个数xx,假如x≤max+1x\leq max+1那么现在就可以构造出1,2...max,max+1...max+x1,2...max,max+1...max+x 于是我们可以这样做,先建立主席树。对于询问区间[l,r][l,r],当前的max=0max=0,然后不断查询区间[l,r][l,r]中11到max原创 2016-02-27 20:26:07 · 1313 阅读 · 0 评论 -
1926: [Sdoi2010]粟粟的书架|主席树|二分答案
ym_fqk神犇提供做法一边看AlphaGo VS 李世石一边写这个sb题居然1A辣。 做法显然。n=1时就是序列上主席树然后二分答案,否则就是区间维护1000个前缀和暴力再二分答案。最后要暴力一下最小值的出现次数。暴力出奇迹,内存贴线。差点被卡飞。。#include<set> #include<map> #include<ctime> #include<queue> #include<cmath原创 2016-03-14 19:14:24 · 461 阅读 · 0 评论