线段树
文章平均质量分 64
tzteyang
这个作者很懒,什么都没留下…
展开
-
线段树合并 简单例题
1.1.1.CF600E经典的dsu on treedsu \ on \ treedsu on tree解决的问题,其实也可以用线段树合并做。用一个dfsdfsdfs遍历这棵树的时候,每次都把父节点代表的树和子节点的数合并起来,然后最后合并完所有的子树之后,再把当前的父节点更新即可,接着存一下当前节点对应的答案,这样就可以每次都统计某个子树的最优颜色了。#include <bits/stdc++.h>using namespace std;#原创 2021-06-04 13:20:15 · 212 阅读 · 0 评论 -
2020ICPC昆明 M - Stone Games (主席树 + 思维)解决区间Mex问题
题意:给你一个长度为nnn的数组,每次询问给出一个区间[l,r][l,r][l,r],问你用当前的区间内的任意个数,不能组成的最小的正整数是多少?思路:这道题其实需要解决的就是,怎么快速求出来,这个不能表示的数是多少,我们这样考虑,假设把当前给定的区间的内的数al,al+1,....,ara_l,a_{l+1},....,a_ral,al+1,....,ar按照从小到大的顺序排起来,考虑sis_isi为这组序列前iii个数的和,我们如果能找到,si+1<ai+1s_i+1 < a_原创 2021-05-25 10:52:57 · 708 阅读 · 0 评论 -
HDU3333 Turing Tree (离线处理 + 线段树) 询问区间内不同的数的和
题意:给你一个长度为nnn序列aia_iai,然后给你mmm个询问,每个询问给出l,rl,rl,r,问你区间[l,r][l,r][l,r]内各不相同的数的和是多少。思路:其实之前碰到过类似思路的问题了,如果codeforces703Dcodeforces703Dcodeforces703D,求区间内出现偶数次的数的异或和,就需要我们求出区间内不同的数的异或和为多少。同理这个题需要我们维护的是区间内出现不同的数的和,类似于那题,可以观察到这道题目里面并没有要求我们在线修改,那么我们就可以通过把区间按原创 2021-05-12 20:14:27 · 87 阅读 · 0 评论 -
2020ICPC·小米 网络选拔赛第一场 E-Phone Network (思维 + 线段树)
题意:给定你一个长度为n的数组,然后对于一个i,让你找到数组中的数能覆盖从1 - i的最少的数为几个,记作为ansians_iansi,让你求出ans1,ans2,....ansmans_1,ans_2,....ans_mans1,ans2,....ansm各自为多少?思路:直接上题解 不好想…我用我自己的话理解一下题解。维护的这个Ri,lR_{i,l}Ri,l,从i状态到i+1状态其实就只有两种情况,一是当前的Ri,lR_{i,l}Ri,l是大于i+1这个数的下一个位置,这种情况最右.原创 2020-12-03 19:56:51 · 132 阅读 · 0 评论 -
BZOJ2653 middle (主席树 + 二分答案 + 维护区间最大连续字段和)
题意:就是问你在给定的[a,b]和[c,d]中怎么样选择左右端点,才能使得这段区间内的数的中位数最大。思路:首先一个对于中位数的套路,对一个M,把区间内小于它的数赋值为-1,大于等于他的数为1,如果对于一个给定的区间,区间和大于等于0的话,代表这个M一定大于等于这个区间的中位数。很明显这个值符合单调递增的性质,所以我们具体找确定的中位数,只需要二分答案即可。再看如何,在[a,b]和[c,d]这个区间内选择,暴力肯定是会超时的,在想这个和不是有单调性嘛,那我们只需要得到给定区间内的最大值看他是否可行即可.原创 2020-11-22 20:26:04 · 216 阅读 · 0 评论 -
P3939数颜色 (主席树)
题意:中文题面,十分清晰思路:很明显的主席树操作,查询区间某数的出现次数,但是更新的时候操作比较秀。我们把xix_ixi和xi+1x_{i+1}xi+1进行交换,我们这样操作,先把a[xi]a[x_i]a[xi]和a[xi+1]a[x_{i+1}]a[xi+1],然后只需要改root[x]和root[x-1]即可,因为我们是在x-1的基础上更改这样不仅可更新x+1带来的影响同时还能把之前的x值给覆盖掉。可以完美AC,要不会被卡好像。代码:#include <bits/stdc++.h.原创 2020-11-20 19:34:45 · 167 阅读 · 0 评论 -
Gym 102770 E-Easy DP Problem (主席树查询区间前k大的和)
题意:写着DP总不可能是dp吧,就是给定一个dp[i][j]的求解方式,如图中分段函数所示,然后给你一个l r k,然后问你dp[ r-l+1 ][ k ]的值为多少?思路:既然题目那这DP,那应该就不是DP吧。手写几项后,反正我写不出来 ,发现我们需要求得就是(∑i=1r−l+1i2\sum_{i=1}^{r-l+1}i^2∑i=1r−l+1i2) + [blb_lbl,bl+1,......brb_{l+1},......b_rbl+1,......br]中前k大的数和。前面的式子很好维护.原创 2020-11-19 15:05:45 · 1763 阅读 · 0 评论 -
2020计蒜之道 线上决赛 C - 攀登山峰(主席树查询出现次数符合要求的最大的下标值)
题意:题目给定一个序列,然后会有m次询问,每次询问让我们找到是否有山峰的高度满足大于(r-l+1)/t,如果有的话输出满足这个条件的山峰最大的高度,否则的话输出-1。思路:区间加询问出现次数满足要求的的高度,很明显得主席树的相关操作。有点小模板题的味道。要找的是满足题目要求高度的最大值,首先看a的范围,先离散化一下,然后对应树存的值就是这个高度出现的次数,只不过这是对应离散化数组的,最后还要再转化为原数组的实际高度,wa了好几次。然后查询函数的时候,因为要找的是最大值,所有我们在递归往下进行的时候先.原创 2020-10-25 18:35:57 · 139 阅读 · 0 评论 -
Gym 102770 B-Bin Packing Problem 2020浙江省省赛 (线段树 + set)
题意:装箱问题。两种算法分别对应操作系统中的首次适应算法和最佳适应算法。然后给定你一个请求序列(顺序不可更改),然后问你在这两种不同的算法下,每种情况会各自申请多少个个大小为C的箱子?思路:很明显就是想怎么用算法有优化这个两种模拟。对于第一种操作:我们每次都需要找的是最前面的第一个大于当前ai的箱子,快速查询就那么几种方法,这里没有顺序,所以我们就有线段树维护区间最大值,然后既然要找最前面的,那么我每次就在符合条件的情况下,尽量往左子树走,否则才会往右子树去找。第二种操作:每次找的是大于等于当前值的.原创 2020-11-17 20:50:40 · 905 阅读 · 0 评论 -
Codeforces 242E-XOR on Segment (线段树 + 区间异或修改、求和)
题意:给你一个长度为n的序列,然后给出每个ai的值。有两种操作:1 l r代表求出区间[l,r]内的ai的和。2 l r x代表把区间[l,r]内的所有的 ai 变成 ai ^ x。对于每个1操作输出查询的结果。思路:看操作很明显就是线段树的操作。但是这里注意对于异或这个运算是不满足交换律的,也就是说 a ^ (b+c) != (a ^ c + b ^ c),那么我们就没办法直接对区间进行操作了。但是,看到异或就应该想到二进制有没有方法,很明显区间ai的和也等于把每一个ai二进制拆分后统计对应二进.原创 2020-11-15 18:27:46 · 640 阅读 · 0 评论 -
2020CCPC绵阳站 J-Joy of Handcraft (去重 + 线段树 + 调和级数)
题意:给定n个灯泡,那个灯泡排列在电路板上,然后每个灯泡给定你一个t和x,这个灯泡会在[2kt + 1,2kt + t],k=(0,1,2…)的时间区间内发出亮度为x的光,其他时间内不发光,然后给定你一个m问你:从第一秒到第m秒每一秒时亮度最大的灯的亮度为多少?辅助:首先我们应该知道调和级数也就是 (1/1 + 1/2 + 1/3 +…+1/n)这个东西的部分和为ln(n)+ 欧拉常数,近似等于logn思路:所以这道题对于给定的m个区间,因为求得是最大的的亮度为多少,所以我们先排个序,将重复时间区间的.原创 2020-11-08 21:57:39 · 582 阅读 · 0 评论 -
2020ICPC·小米 网络选拔赛第二场 C - Data Structure Problem (化简公式 线段树)
题意:给定一个n,还有一序列a和b,然后m次操作,操作的具体提要求看题目吧。看题目名字都知道是数据结构题了,再看到修改查询操作就想线段树。思路:想用线段树,但是根据题目给定的查询形式,无法直接区间询问或者啥操作,所以需要我们化简一下这个询问的公式。询问Cx,就要对每一个 1 <= i <= x,做一个这样的操作Ci = max(Ci-1 + bi,ai)我们写一下c3的式子看下规律:c1 = max(c0 + b1 , a1)c2 = max(c1 + b2 , a2) = max.原创 2020-11-04 21:43:56 · 122 阅读 · 0 评论