线段树小结

一些常见?小技巧

一.区间查询

形如 [ l , r ] [l,r] [l,r]( l ∈ [ 1 , n ] , r ∈ [ l , n ] l\in[1,n],r\in [l,n] l[1,n],r[l,n])的序列统计问题,常使用枚举左端点,快速计算对应的右端点的总答案的方式。

例如洛谷P6477 [NOI Online #2 提高组] 子序列问题
先不考虑重复,那答案则显而易见,然后去重
枚举左端点l,明显[l,r]中有s个重复时答案为 ( r − l + 1 − s ) 2 (r-l+1-s)^2 (rl+1s)2
对于每个重复点都会对后面的重复点造成s+1的影响,可以用线段树统计
将其暴力拆成 ( r − l + 1 ) 2 − 2 ∗ s ∗ ( r − l + 1 ) + s 2 (r-l+1)^2-2*s*(r-l+1)+s^2 (rl+1)22s(rl+1)+s2
可以看到我们可以 O ( 1 ) O(1) O(1)统计 2 ∗ s ∗ ( r − l + 1 ) 2*s*(r-l+1) 2s(rl+1)
s 2 s^2 s2可以 O ( l o g n ) O(logn) O(logn)统计


二.序列性质

形如 [ l , r ] [l,r] [l,r]是否为连续上升/下降序列,n的排列等询问,可以结合哈希乱搞。对于每个点的值进行哈希,最后统计3个或以上的总和与目标的哈希综合比较即可。

比如洛谷P3792 由乃与大母神原型和偶像崇拜
只要维护和,平方和,三次方和/异或和/幂次和就能够通过。
这里推荐幂次和,底数和模数都取大质数。


三.线段树建图

就是用来优化出现了i要对一段连续区间连边的情况,可以用线段树建图减少边数。
然后一般就是缩点图论。

例如洛谷P5025 [SNOI2017]炸弹
将能炸到的在线段树连边建图,跑缩点然后dfs统计。
最后的那个DAG统计能到达结点权值和比较新奇,因为是区间就可以统计最小大值做差,避免了世纪难题。


四.扫描线

不是太清楚,大概就是一种排序一维线段树/树状数组维护第二维的玩意。

例如洛谷P4088 [USACO18FEB]Slingshot P
按x排序后树状数组统计答案
绝对值拆成四种情况取最值即可。

关于二维数点问题有时也可以看作偏序用CDQ解决。


五.标记永久化

感觉一般没什么用啊,除了卡卡常(
大概就是不下传标记,询问的时候加上标记的整一段区间对答案的贡献即可。

莫得例子。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值