写了几道线段树入门题以后的我感觉会了点东西~
放几道有代表性的。
P.S.洛谷的题号
P3372模板
这个不用说了。
P1558色板游戏
状压,区间或,裸题。
P2471降雨量
思路不难,细节很多。
P2572序列操作
题意:
长度为n的01序列,m次操作
0 a b 把[a, b]区间内的所有数全变成0
1 a b 把[a, b]区间内的所有数全变成1
2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0
3 a b 询问[a, b]区间内总共有多少个1
4 a b 询问[a, b]区间内最多有多少个连续的1
n,m<=100 000
细节更多,更麻烦,对于每个节点要维护好多值好多特判。
这个题的sign传递十分巧妙。
解法:
首先 如果只有操作 0,1,3 这就没什么技术含量了
每个节点的sign,-1,0,1,2,代表这个区间里的状态,如果修改是 2 就可以 抵消掉当前的sign2 ,或者把sign1变0,0变1
然后每个点存一个 sum,sumr0,sumr1,suml0,suml1,max0,max1,在询问时,根据相应的sign 可以 导出答案
P2824排序
题意:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序,排序分为两种:1:(0,l,r)表示将区间[l,r]的数字升序排序2:(1,l,r)表示将区间[l,r]的数字降序排序最后询问第q位置上的数字。 n,m <= 30 000
十分有趣的一道题。
看题解用二分+线段树check 写我也是惊了,思路奇特。
解法:
二分答案,然后把大于等于答案的数赋成1,其余的赋成0,
每次排序就等同于把1堆在一边,0堆在一边,这个能够拿线段树实现
排序完就可以得到答案和当前二分到的答案的大小关系了->那么继续二分
P3415祭坛
题超有意思! 可是好简单 =、=
坐标离散化。
持续更新中。。。