随笔分类 -  数据结构 线段树

摘要:【题目】 " 2302. 「NOI2017」整数" 【题意】有一个整数x,一开始为0。n次操作,加上a 2^b,或询问2^k位是0或1。$n \leq 10^6,|a| \leq 10^9,0 \leq b,k \leq 30n$。 【算法】压位+线段树 【参考】 "GXZlegend" 先考虑以每 阅读全文
posted @ 2018-05-25 08:04 ONION_CYC 阅读(310) 评论(0) 推荐(1)
摘要:【题目】 " 6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop" 【题意】给定一个长度为n的物品序列,每个物品有价值、不超过m的重量。要求支持以下三种操作:1.物品价值区间加减,2.物品重量区间加(超过m部分取模),3.区间物品求解容量为m的完全背包数组。$n \leq 2 1 阅读全文
posted @ 2018-05-23 16:19 ONION_CYC 阅读(322) 评论(0) 推荐(0)
摘要:【题目】 "贝壳找房户外拓展(中等)" 【题意】给定$n \times m$的棋盘,q次操作:1.在一个列区间设置p和q。2.询问一个行区间,初始x为0,从左到右x=x p+q,求x。3.撤销一次设置操作。保证所有1和3都在2前面。$n,m,q \leq 10^5$。 【算法】扫描线+线段树 【题解 阅读全文
posted @ 2018-05-20 22:16 ONION_CYC 阅读(337) 评论(0) 推荐(0)
摘要:【题目】 "BZOJ 1095" 【题意】给定n个黑白点的树,初始全为黑点,Q次操作翻转一个点的颜色,或询问最远的两个黑点的距离,$n \leq 10^5,Q \leq 5 10^5$。 【算法】括号序列+线段树 【题解】参考: "konjac" 括号序列其实就是入栈出栈序,每个点在进入时加左括号和 阅读全文
posted @ 2018-05-17 17:02 ONION_CYC 阅读(386) 评论(0) 推荐(0)
摘要:【题目】2017"百度之星"程序设计大赛 - 初赛(A) 【题意】给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度。n<=500000。 【算法】线段树+RMQ-LCA+树链的交 【题解】树链的交:记一条链为(a1,b1),LCA为c1。另一条链为(a2,b2 阅读全文
posted @ 2018-03-14 11:45 ONION_CYC 阅读(469) 评论(0) 推荐(0)
摘要:【题意】给定序列,支持区间加和区间乘,查询区间和取模。n<=10^5。 【算法】线段树 【题解】线段树多重标记要考虑标记与标记之间的相互影响。 对于sum*b+a,+c直接加上即可。 *c后就是(sum*b+a)*c=sum*b*b+a*c,也就是加法的部分也要乘。 所以,每次在乘法的时候要把加法标 阅读全文
posted @ 2018-03-02 15:08 ONION_CYC 阅读(312) 评论(0) 推荐(1)
摘要:【题意】给定n棵高度初始为0的草,每天每棵草会长高a[i],m次收割,每次在d[i]天将所有>b[i]的草收割到b[i],求每次收割量。n<=500000。 【算法】线段树上二分 【题解】按照生长速度a[]排序后,容易发现数列永远单调。 在线段树上的区间维护以下值: 1.最后一棵草的高度a 2.上次 阅读全文
posted @ 2018-02-15 15:45 ONION_CYC 阅读(1213) 评论(0) 推荐(4)
摘要:【题目】E. Physical Education Lessons 【题意】10^9范围的区间覆盖,至多3*10^5次区间询问。 【算法】线段树 【题解】每次询问至多增加两段区间,提前括号分段后线段树。 #include<cstdio> #include<cctype> #include<set> 阅读全文
posted @ 2018-01-15 13:16 ONION_CYC 阅读(482) 评论(0) 推荐(1)
摘要:【题目】D. Roads in Yusland 【题意】给定n个点的树,m条从下往上的链,每条链代价ci,求最少代价使得链覆盖所有边。n,m<=3*10^5,ci<=10^9,time=4s。 【算法】树形DP+线段树||可并堆 【题解】从每条边都需要一条链来覆盖的角度出发,令f[i]表示覆盖子树 阅读全文
posted @ 2017-12-22 11:44 ONION_CYC 阅读(695) 评论(0) 推荐(0)
摘要:【题目】C. Ultimate Weirdness of an Array 【题意】给定长度为n的正整数序列,定义一个序列的价值为max(gcd(ai,aj)),1<=i<j<=n,定义f(i,j)为移除序列i~j后剩余序列的价值,求Σf(i,j)。1<=n,ai<=2*10^5。 【算法】数论+线 阅读全文
posted @ 2017-12-20 22:15 ONION_CYC 阅读(354) 评论(0) 推荐(0)
摘要:【题意】给定n个点的树,从无到有加边,过程中动态询问当前图某条边两端连通点数的乘积,n<=10^5。 【算法】线段树合并+并查集 (||LCT(LCT维护子树信息 LCT维护子树信息(+启发式合并))——嗷嗷待补) 【题解】先将所有边离线加入计算dfs序(套路,强制固定原树形态) 对于一条边(u,v 阅读全文
posted @ 2017-10-24 21:56 ONION_CYC 阅读(327) 评论(0) 推荐(1)
摘要:【题意】给定n个点的树,m次求[a,b]和[c,d]中各选出一个点的最大距离。abcd是标号区间,n,m<=10^5 【算法】LCA+树的直径理论+线段树 【题解】 树的直径性质:距离树上任意点最远的点一定是直径的一端。此结论在点集中依然试用。 那么根据性质,容易得到答案路径的两端一定是[a,b]直 阅读全文
posted @ 2017-10-11 17:04 ONION_CYC 阅读(578) 评论(0) 推荐(2)
摘要:【算法】线段树||树状数组&&并查集 【题解】修改必须暴力单点修改,然后利用标记区间查询。 优化:一个数经过不断开方很快就会变成1,所以维护区间最大值。 修改时访问到的子树最大值<=1时,该区间就不必修改。 #include<cstdio> #include<cmath> #include<algo 阅读全文
posted @ 2017-09-23 07:35 ONION_CYC 阅读(213) 评论(0) 推荐(0)
摘要:【算法】贪心+线段树 【题意】给定n个数字ci,m个区间[a,b](1<=a,b<=10^5),每个位置最多被ci个区间覆盖,求最多选择多少区间。 附加退化问题:全部ci=1,即求最多的不相交的区间。 【题解】本题是区间和点之间的经典贪心,有两种经典做法,本质思想都是通过排序实现扫描线,细节根据题目 阅读全文
posted @ 2017-09-22 12:58 ONION_CYC 阅读(361) 评论(0) 推荐(0)
摘要:【算法】线段树(经典线段树上二分) 【题意】n个房间,m个询问,每次订最前的连续x个的空房间,或退订从x开始y个房间,求每次订的最左房间号。 【题解】关键在于找连续x个空房间,经典二分。 线段树标记sum,lsum,rsum,表示最长连续房间,从左开始最长连续房间,从右开始最长连续房间。 对于区间k 阅读全文
posted @ 2017-09-14 19:57 ONION_CYC 阅读(311) 评论(0) 推荐(0)
摘要:【算法】数学+线段树/树状数组 【题解】 首先三个操作可以理解为更相减损术或者辗转相除法(待证明),所以就是求区间gcd。 这题的问题在线段树维护gcd只能支持修改成一个数,不支持加一个数。 套路:gcd(a,b,c,d,e)=gcd(a-b,b-c,c-d,d-e,e),也就是所有数的gcd可以转 阅读全文
posted @ 2017-09-10 18:58 ONION_CYC 阅读(268) 评论(0) 推荐(0)
摘要:【算法】最短路树+(树链剖分+线段树)||最短路树+并查集 【题解】 两种方法的思想是一样的,首先题目限制了最短路树唯一。 那么建出最短路树后,就是询问对于每个点断掉父边后重新找路径的最小值,其它路径只能是这个点和其子树节点通过非树边到达非子树节点。 这样考虑很难统计,换个角度考虑每条非树边的影响。 阅读全文
posted @ 2017-08-31 08:48 ONION_CYC 阅读(404) 评论(0) 推荐(0)
摘要:【关键字】偏序,数点,树状数组,线段树,扫描线。 因为涉及多种算法,所以整合到一起。 【扫描线】 二维数点,偏序 ★数点问题 ★关于偏序问题的一些总结 扫描线是一维离线的做法的统称,常用于解决k维偏序问题。 离线:将其中一维的询问排序后按顺序处理,从而实现按时间顺序处理的过程中可以O(1)统计空间上 阅读全文
posted @ 2017-08-12 11:11 ONION_CYC 阅读(1012) 评论(0) 推荐(1)
摘要:【算法】DP+线段树求区间max(二维偏序) 【题解】 状态转移方程:f[i]=max(f[j]+v[i]),x[j]<x[i]&&y[j]<y[i]。 观察j的条件限制显然是二维偏序求最大值,套路化地离散化后一维排序+一维线段树即可解决。 最后在f[i]中找max,所以不用恢复原序。 复杂度O(n 阅读全文
posted @ 2017-08-12 07:02 ONION_CYC 阅读(310) 评论(0) 推荐(0)
摘要:【算法】扫描线:差分+树状数组 【题意】转化模型后:求每个矩形覆盖多少点和每个点被多少矩形覆盖。n<=10^5。 【题解】经典的扫描线问题(二维偏序,二维数点)。 数点问题 将所有询问离线并离散化,然后按从上到下排序。 对于点被覆盖问题: 扫描线从上到下进行,遇到矩阵上边界维护区间加,遇到矩阵下边界 阅读全文
posted @ 2017-08-11 21:28 ONION_CYC 阅读(477) 评论(0) 推荐(0)