随笔分类 - 数据结构--线段树
摘要:题目 SP6779 GSS7 - Can you answer these queries VII 分析 明显可以树剖/\(LCT\),转化成经典问题:区间动态查询最大子段和。 树剖的话无非是每次求完了还要把 \(log\) 个区间再拼起来。 \(LCT\) 的话就只拼数据结构上的了(指 \(Spl
        阅读全文
                
摘要:题目 CF522D Closest Equals 分析 回滚莫队/莫队+根号分治/线段树。 这道题和回滚莫队板题维护的信息正好相反,显然也是可以回滚莫队的。 但是会被卡,但是发现这个题目求的东西和区间数颜色的套路很像,于是可以考虑线段树/树状数组。 于是我们考虑离线询问,把询问挂到右端点上,然后就是
        阅读全文
                
摘要:题目 P4137 Rmq Problem / mex 给定一个序列,多次询问区间 \(mex\) 。 分析 主席树/莫队+值域分块/回滚莫队。 主席树 主席树做法很显然,直接每一个点新建一个树,然后询问就是在两个前缀主席树上差分二分就行了。 时间复杂度 \(O(nlogn)\) 莫队+值域分块 可以
        阅读全文
                
摘要:题目 P4175 [CTSC2008]网络管理 树上单点修改,查询路径第 k 大。 解答 这道题做法很多,有 树剖+线段树+平衡树+二分 的,也有 树剖+可持久化线段树+树状数组 的,也有 可持久化线段树+差分+树状数组 的,还有就是 整体二分+树剖 的。 复杂度都是几个 \(log\) 的做法。 
        阅读全文
                
摘要:CF940F Machine Learning 首先显然可以直接树套树做,在权值线段树上二分即可。 但是这里数据 1e5 并且可以离线,我们可以想到直接莫队/值域分块来做。 那么直接带修莫队暴力维护即可。 代码: #include<bits/stdc++.h> const int M=1e5+5; 
        阅读全文
                
摘要:CF786B Legacy 线段树优化建图板子题。 首先对于题目的三种连边方式,我们可以通过三种办法来分别维护。 点点连边直接 Addedge 即可。 点->区间 连边可以建立一棵线段树,这个线段树代表区间和普通的一样,只不过在建树的时候连接两条边权为 0 的边到左右区间即可。 区间->点 连边可以
        阅读全文
                
摘要:CF877E Danil and a Part-time Job 树剖然后线段树维护即可,维护取反操作本质就是交换 01 的个数即可。 代码: #include<bits/stdc++.h> using namespace std; template <typename T> inline void
        阅读全文
                
摘要:CF915E Physical Education Lessons 动态开点线段树和询问区间 sum 板子题,没有什么好说的,注意动态开点线段树的空间问题即可。 代码: #include <bits/stdc++.h> using namespace std; #define getchar()(p
        阅读全文
                
摘要:P5459 [BJOI2016]回转寿司 给定一个序列,求有多少个子区间满足区间和大于等于 \(L\) 且小于等于 \(R\) 。 像这样的区间信息可以拆分成前缀和的,也就是具有区间可减性的信息,我们可以直接求一遍前缀和。 然后我们发现题目就变成了求点对数量了,而且这里很明显就是一个二维偏序问题,求
        阅读全文
                
摘要:BS4150【NOI2014模拟17】花园(树剖,线段树,差分) 这道题可以差分然后线段树询问来做,同时也可以直接树剖然后在线段树内部用 set 维护。 可知线段树树高严格 \(logn\) ,所以单次修改是 \(O(log^3n)\) ,查询是 \(O(log^2n)\) ,1e5的数据比较卡,可
        阅读全文
                
摘要:P3703 [SDOI2017]树点涂色(LCT+线段树) 首先线段树区间染色,然后对于操作 1 很像 LCT 的 Access 操作,于是可以考虑 LCT 。 然后用线段树来维护 LCT 的信息即可。 当然也可以直接大力树剖,两个时间复杂度都是 \(O(nlog^2n)\) 。
        阅读全文
                
摘要:P3703 [SDOI2017]树点涂色(LCT+线段树) 首先线段树区间染色,然后对于操作 1 很像 LCT 的 Access 操作,于是可以考虑 LCT 。 然后用线段树来维护 LCT 的信息即可。 当然也可以直接大力树剖,两个时间复杂度都是 \(O(nlog^2n)\) 。
        阅读全文
                
摘要:P1975 [国家集训队]排队 P1975 [国家集训队]排队 对于一个长度为 n 的序列进行 k 次操作,每次操作都是交换序列中的某两个数。对于每一个操作,回答当前序列中有多少个逆序对。 树状数组套权值线段树直接维护,考虑每次修改的贡献即可。 view code #include<bits/std
        阅读全文
                
摘要:(趁还是最优解,题解区也没有$zkw$跑来写一篇$zkw$的题解$QWQ$) 题面 传送门 分析 Solution 1 根据题意,我们可以发现直接搞肯定不现实 那么我们考虑维护对于一个整段区间的信息,来代替每一个点的信息 所以很容易想到哈希的做法 那么这里我们可以考虑维护区间的平方和 (为什么呢,别
        阅读全文
                
摘要:题意 传送门 简化题意: 给定长度为$n$的初始值都为$0$的序列,有$m$次操作,求$m$次操作过后的整个序列 每次操作如下: $1.\(对区间\)[l,r]$中的所有元素与$h$取$max$ $2.\(对区间\)[l,r]$中的所有元素与$h$取$min$ 分析 线段树好题 一道 区修 单查 可
        阅读全文
                
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号