随笔分类 - 数据结构—线段树
摘要:1018: [SHOI2008]堵塞的交通traffic 链接 分析: 用线段树维护区间的四个端点的联通情况,然后查询的时候,把所有覆盖到的区间合并起来即可。 六种情况左上到右上(左边到右边的情况)……,左上到左下(同一侧相互到达的情况)…… 同一侧相互到达的情况,查询[l,r]是查的不完全。因为还
阅读全文
摘要:C. Max Mex https://codeforces.com/contest/1083/problem/C 题意: 一棵$n$个点的树,每个点上有一个数(每个点的上的数互不相同,而且构成一个0~n-1的排列),要求找到一条路径,使得路径的$mex$最大。 分析: 问题转化为,查询一个a,0~a
阅读全文
摘要:3110: [Zjoi2013]K大数查询 https://lydsy.com/JudgeOnline/problem.php?id=3110 分析: 整体二分+线段树。 两种操作:区间加入一个数,区间询问第k大值。 如果只有一种操作,我们可以二分答案x,然后把大于x的都加入到线段树中去(区间[l,
阅读全文
摘要:4826: [Hnoi2017]影魔 https://lydsy.com/JudgeOnline/problem.php?id=4826 分析: 莫队+单调栈+st表。 考虑如何O(1)加入一个点,删除一个点,类似bzoj4540。然后就可以莫队了。复杂度$O(n\sqrt n)$ 代码: 1 #i
阅读全文
摘要:#2585. 「APIO2018」新家 https://loj.ac/problem/2585 分析: 线段树+二分。 首先看怎样数颜色,正常的时候,离线扫一遍右端点,每次只记录最右边的点,然后查询左端点,这里不太行。这里只需要统计是否全出现过,pre[i]为这个颜色的上一个位置,那么这也就说明了p
阅读全文
摘要:1109: [POI2007]堆积木Klo https://lydsy.com/JudgeOnline/problem.php?id=1109 分析: 首先是dp,f[i]表示到第i个的最优值,f[i]=f[j]+1,(j<i,a[j]<a[i],j-a[j]<i-a[i]),三维偏序,可以cdq+
阅读全文
摘要:B. The Bakery http://codeforces.com/contest/833/problem/B 题意: 将一个长度为n的序列分成k份,每份的cost为不同的数的个数,求最大cost的和。1≤n≤35000,1≤k≤50 分析: dp[i][j]表示前i个数,分了j份。dp[i][
阅读全文
摘要:D. Bash and a Tough Math Puzzle http://codeforces.com/contest/914/problem/D 题意: 单点修改,每次询问一段l~r区间能否去掉小于等于1个数,使gcd为x 分析: 线段树。 线段树二分。如果一边的gcd不是x,那么递归这一边,
阅读全文
摘要:Autostrady https://szkopul.edu.pl/problemset/problem/f2dSBM7JteWHqtmVejMWe1bW/site/?key=statement 题意: 首先给定一棵树,除了n-1条树边以外,还有m条非树边。每次询问两个点的满足以下条件的路径条数。
阅读全文
摘要:2212: [Poi2011]Tree Rotations https://www.lydsy.com/JudgeOnline/problem.php?id=2212 分析: 线段树合并。 首先对每个节点建立一棵权值线段树,然后遍历整棵树,从叶子节点开始合并,每次合并两个节点的主席树,判断是否交换这
阅读全文
摘要:3693: 圆桌会议 https://www.lydsy.com/JudgeOnline/problem.php?id=3693 分析: Hall定理+线段树。 如果将桌子放到左边,每组的人拆开放到右边,就成了二分图匹配问题,问是否存在完美匹配。 Hall定理:设二分图中G=<V1,V2,E>中 |
阅读全文
摘要:5312: 冒险 https://www.lydsy.com/JudgeOnline/problem.php?id=5312 分析: 考虑区间and,or一个数,其实是让一段区间的一些二进制位上成为0,或者1。 先考虑or:对一段区间or x,它所能更新的二进制位就是x的二进制位是1的位。在线段树上
阅读全文
摘要:3155: Preprefix sum https://www.lydsy.com/JudgeOnline/problem.php?id=3155 分析: 区间修改,区间查询,线段树就好了。 然后,这题有树状数组! 代码: 线段树620ms 1 /* 2 一个数修改影响后面的数,使后面的数都增加或者
阅读全文
摘要:4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值。 代码:
阅读全文
摘要:3211: 花神游历各国 链接 分析: 1e9的,开5次方,就变成了1,所以暴力开方即可,记录一个tag,当前节点是否全为1或者0。 记一下各种zz的bug:1、开方后可能为0,不只是1,所以判断<=1,不是==1;2、开longlong,每个节点1e9,加起来就比1e9大了。3、读入的时候也可以判
阅读全文
摘要:4034: [HAOI2015]树上操作 链接 思路: 树链剖分。操作:单点修改,路径查询,子树修改。 代码:
阅读全文
摘要:链接 思路 bug漫天飞。。。 维护一颗线段树,支持区间赋值,和区间异或。因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下。 U [l,r]赋值为1 I [0,l-1],[r+1,n]赋值为0 D [l,r]区间涂0 C [0,
阅读全文
摘要:链接 思路: 发现总的区间长度是不固定的,线段树是无法每次增加一个位置的,所以直接开始时默认区间长度是n(最多插入n个数),所以直接建线段树维护即可。 另一种思路:维护一个单调栈,从上往下保证递增,并且记录栈中每个元素的位置,每次询问寻找栈中最靠下的,位置满足条件的元素。 代码 线段树:992ms
阅读全文
摘要:Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13726 Accepted Submission(s): 4160 Pr
阅读全文
摘要:P3373 【模板】线段树 2 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔
阅读全文

浙公网安备 33010602011771号