安利一下近期做的几道线段树入门题

写了几道线段树入门题以后的我感觉会了点东西~

放几道有代表性的。

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祭坛

题超有意思! 可是好简单 =、= 

坐标离散化。

持续更新中。。。

原文地址:https://www.cnblogs.com/Elfish/p/8016182.html