返回顶部

随笔分类 -  线段树

摘要:P2572 [SCOI2010]序列操作 对于区间覆盖,我们都习以为常了,对于连续的$1$这种线段树区间连续问题,维护左儿子右端点连续最大和右儿子左端点连续最大即可解决,那么取反操作就是将区间连续的$1$和连续的$0$的数量交换,分别对$0$和$1$维护连续也可解决,再看懒标记的问题,首先赋值会覆盖 阅读全文
posted @ 2021-11-25 11:51 _Kolibri 阅读(79) 评论(0) 推荐(0)
摘要:P4145 上帝造题的七分钟 2 / 花神游历各国 最大数为$10^{12}$,开方最多开$6$次,线段树维护一个区间最大值,如果最大值为$1$就不需要进行操作了,否则暴力递归. #include <bits/stdc++.h> using namespace std; const int N=1e 阅读全文
posted @ 2021-11-25 11:44 _Kolibri 阅读(59) 评论(0) 推荐(0)
摘要:洛谷 P2894 [USACO08FEB]Hotel G 题意:$n$个房间,$m$个操作,每次有2中操作,操作1为在$[1,n]$中查询长度为$x$的连续空房间,输出最小的最左端的房间id,然后占用这$x$个房间,操作2使得$[x,x+y-1]$这么多房间空出来. 题解:连续的区间和问题,经典用线 阅读全文
posted @ 2021-11-22 22:10 _Kolibri 阅读(147) 评论(0) 推荐(0)
摘要:完完全全就是segment tree beats的板子题 代码: #include <bits/stdc++.h> using namespace std; #define PII pair<int,int> #define fi first #define se second #define pb 阅读全文
posted @ 2021-11-13 19:46 _Kolibri 阅读(68) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的括号序列,有$q$个询问,两种操作,1是交换$l$和$r$位置的字符,2是询问$l$到$r$的括号序列是否合法。 题解:先将括号序列用$1$和$-1$表示,不难发现,对于一个合法的括号序$[l,r]$,其区间和一定为0,且区间内任一位置的前缀和都不能小于$0$,即前缀和最小值 阅读全文
posted @ 2021-10-22 11:03 _Kolibri 阅读(96) 评论(0) 推荐(0)
摘要:题意:给你一个长度为$n$的序列,问你有多少子序列满足第一个元素不大于最后一个元素。 题解:假设子序列的尾元素在原序列的位置为$j$,如果$i\ (i<j)$位置满足$A[i]\le A[j]\(,那么,\)[i,j]$的合法子序列个数为$2^{j-i-1}$,因为一定选$i$和$j$,中间的部分有 阅读全文
posted @ 2021-10-06 15:55 _Kolibri 阅读(91) 评论(2) 推荐(1)
摘要:题意:有一长度为$n$的序列,正向遍历,对于第$i$个元素,可以将其插入deque的队头或者队尾,问你最终得到deque后,逆序对最少是多少? 题解:假如将当前这个数插入队头,那么新增的逆序对就是$[2,len]$中小于$a[i]$的个数,插入队尾也是同理,结合逆序对的求法,我们可以用线段树分别求出 阅读全文
posted @ 2021-09-30 01:24 _Kolibri 阅读(72) 评论(0) 推荐(0)
摘要:题意:一个长度为$n$的序列$x$,$m$次操作,有两种,一种是对区间$[l,r]$的数乘上$w$,一种是询问$[l,r]$的每个数的欧拉函数之和。 题解:首先看数据范围,$x[i]$和$w$的值都很小,最大才$100$,根据欧拉函数公式:\(\phi [N]=N*(1-\frac{1}{p_1}) 阅读全文
posted @ 2021-09-27 12:44 _Kolibri 阅读(232) 评论(0) 推荐(1)
摘要:题意:有2行,每行$n$个点,给你$m$个连接上下两行的边,问你最对能选多少条边,这些边互不相交。 题解:先固定选上面或者下面一行作为起点去遍历,假设选下面一行,我们从头开始遍历,假设遍历到$i$个点时,枚举它的所有出边$to$,假设这条边的终点为$j$,设$dp[j]\(表示区间\)[1,j]$的 阅读全文
posted @ 2021-09-25 21:55 _Kolibri 阅读(75) 评论(0) 推荐(0)
摘要:题意:有$k$个机器,下标$[0,k-1]$,现在有$n$个任务,每次给你起始时刻和持续时间,第$i$个任务从第$i\mod k$个机器开始,如果当前机器没有任务在进行,则执行这个任务,否则去找$(i+1)\mod k$,....,如果所有机器都在执行任务,则忽略这个任务,所有任务询问完后,问你哪些 阅读全文
posted @ 2021-09-22 22:24 _Kolibri 阅读(176) 评论(0) 推荐(1)
摘要:题意:在二维平面上,分布着很多矩阵,这些矩阵是陷阱,有一只兔子每次固定向四周四个方向跳$d$个单位,问你是否存在一个起点,使得兔子无论怎么跳都不跳到陷阱中。 题解:因为兔子固定跳$d$个单位,因此具有周期性,也就是说,假如它的起点是$d$x$d$的矩阵的某一点,那么它无论跳到什么位置,该位置都能和初 阅读全文
posted @ 2021-09-08 15:30 _Kolibri 阅读(75) 评论(0) 推荐(0)
摘要:题意:有一组数,问你有多少子区间的和$<t$. 题解:先用前缀和优化,可以表示成$sum[r]-sum[l-1]<t$.移项得到:\(sum[l-1]>sum[r]-t\).那么就可以用一棵权值线段树来解决此问题,每次插入$sum[r]$的时候查询有多少满足条件的$sum[l-1]$,这里不懂的可以 阅读全文
posted @ 2021-08-29 17:29 _Kolibri 阅读(56) 评论(0) 推荐(0)
摘要:题意:有一个$n$x$m$的矩阵,有$k$个炸弹分布在矩阵上,你最开始在$(1,1)$的位置,每次可以向下或者向右走到空的单位,问你最多能到达多少单位(假设你可以从起点开始走无限次). 题解:这题的数据范围很大,不好处理.假如某个位置$(x,y)\(有炸弹,并且\)(x-1,y+1)\(到\)(x- 阅读全文
posted @ 2021-08-04 13:37 _Kolibri 阅读(63) 评论(0) 推荐(0)
摘要:题意:有一颗$n$个结点的树,每个点都有点权$w[i]\(,但现在并不知道点权是多少,对于条边\)(u,v)$,我们知道$w[u]\ xor\ w[v]$的值,以及每个点权的范围$l[i],r[i]$. 题解:先假设$w'[1]=0$,然后可以线性推出其他$w'[i]$的值,在推的过程中不难发现,假 阅读全文
posted @ 2021-07-29 17:23 _Kolibri 阅读(104) 评论(0) 推荐(0)
摘要:题意:有长度为$k$的数组$b$,问你是否能构造一个长度为$2k-1$的数组$a$,使得对于$a_1,a_2,...,a_{2i-1}$,其中位数是$b_i$. 题解:首先要能看出一个结论,即对于一个有序的序列,我们在其中位数左边添加两个数,会使得中位数的位置左移一个,在其右边添加两个会使得中位数的 阅读全文
posted @ 2021-06-08 19:30 _Kolibri 阅读(78) 评论(0) 推荐(0)
摘要:题意:有$2k$个队伍进行$2k-1$场比赛,1和2比,3和4比,...,每两两决出胜者进行下一轮,现在给你一长度为$2^k-1$的字符串,每个位置代表按顺序的比赛结果,$0$表示下标小的队伍胜,$1$表示下标大的队伍胜,?表示未知,有$q$个询问,每次修改字符串的一个字符,问最后有多少可能的冠军。 阅读全文
posted @ 2021-06-08 01:24 _Kolibri 阅读(86) 评论(0) 推荐(0)
摘要:题意:给你一个序列,有$q$个询问,每次询问一个区间$[l,r]\(,你要将这个区间内的数*最少*分成几个子序列,使得每个序列中的众数出现的次数不大于\)\lceil \frac{2}\rceil$($x$为子序列区间长度). 题解:假如区间内众数出现的次数$cnt<=\lceil \frac{2} 阅读全文
posted @ 2021-04-26 17:45 _Kolibri 阅读(52) 评论(0) 推荐(0)
摘要:题意:刚开始有一长度为$n$,空白的空数组,有$q$次询问,每次询问都会选一个区间$[l,r]$将其全部涂成颜色i,现在给你一个数组,问你能否得到所给的数组,$0$表示任何颜色都可以. 题解:首先这题有一个坑点,数组中必须要有颜色$q$,然后,易知两个相同颜色之间一定不能有比它小的颜色出现,那么对于 阅读全文
posted @ 2021-04-26 17:23 _Kolibri 阅读(52) 评论(0) 推荐(0)
摘要:题意:RT,但是这题不能直接模拟(因为会炸longlong?). 题解:我们可以用线段树来处理,如果是操作1,就找到叶子结点将它修改为$m$,如果是操作$2$,我们就将修改位置的叶子结点修改为$1$即可,这样的话整个操作中就没有除法出现,也应该不会炸long long,每次询问根节点的值即可. 代码 阅读全文
posted @ 2021-04-26 14:08 _Kolibri 阅读(69) 评论(0) 推荐(0)
摘要:题意:给你$n$个矩形,求矩形并的面积. 题解:我们建立坐标轴,然后可以对矩形的横坐标进行排序,之后可以遍历这些横坐标,这个过程可以想像成是一条线从左往右扫过x坐标轴,假如这条线是第一次扫过矩形的宽(长)的话,我们就可以在$y$轴上对应的区间打上标记,每次枚举的面积就是当前横坐标和上次横坐标的差值乘 阅读全文
posted @ 2020-12-07 20:12 _Kolibri 阅读(106) 评论(0) 推荐(0)