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

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

放几道有代表性的。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值