线段树题集

本文详细介绍了从入门到进阶的算法与数据结构应用实例,包括线段树、扫描线、树状数组等核心概念及解题策略。涵盖了从HDU、POJ、ZOJ等平台的精选题目解析,以及CF、CF311D等比赛题的深入分析。通过实例讲解,帮助读者掌握各类问题的解决方法,并提供了优化技巧,如状态压缩、延迟标记、二分搜索等。此外,文章还涉及了线段树与树状数组的打包传递技术,以及数学结论的应用,旨在提升读者的编程能力与解题思维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HDU 1166 入门题 
HDU 1754 入门题
HDU 1698 入门题
POJ 2777 入门题
POJ 3667 入门题



HDU 3333
线段树+hash。
HDU 3874
线段树+hash。

HDU 4288
HDU 4521
HDU 3450 
HDU 3607
HDU 3016
HDU 1542 扫描线
HDU 3255 长方体扫描线
HDU 3642 长方体
HDU 4027
HDU 3954
以上部分我记得是HH大牛的博客上的题 具体的记不清了




HDU 4417 离线线段树,较简单
HDU 4419 线段树扫描线,网上看到的做法可以不做延迟标记,用状态压缩来混颜色
HDU 4614 线段树裸题+二分,不难
HDU 4630 离线线段树
HDU 4605 离线线段树或在线可持续化线段树,注意C++提交要扩栈




ZOJ 3324 省赛线段树
ZOJ 3381 线段树DP,不难
ZOJ 3349 LIS线段树,不难
CF 85D/HDU 4288/ZOJ 3606  这三题做法一样,其中前2题题目完全一样 后一道是以前的省赛题
ZOJ 3612 线段树/平衡树 貌似set就可以过
CF 314C 树状数组/线段树+dp 


ZOJ 3686 树转线段树,貌似这个叫欧拉序还是什么的,入门题
CF 343D  也要将树转成线段树,不过还需要别的处理。
CF 383C  我也是将树转成线段树后处理的,这里子孙和子孙的子孙处理不一样,解决方法很简单,我是根据深度的奇偶性把奇数层和偶数层
各自处理。


CF 380C  我使用线段树打包传递做的。貌似DP就可以,解法很多。
线段树打包传递的做法是由于每个区间查询的答案不能直接加起来,需要将区间的多个信息传递上来处理。
我记得用struct的内存开销大一点,用pair将元素打包的解法内存开销小一点。
CF 295E 线段树打包传递。我以前用了struct打包元素T了,然后看了人家用了2个pair打包了3个元素就可以。应该是pair开销小一点,
也可能struct可以过,我写的有问题。有兴趣可以试一下。 还有一种打包传递的做法是另外建一个和原来一样大小的虚线段树,然后每次把
要传递的东西记在相应位置的虚线段树节点上。




CF 311D 有个数学结论,设mod=95542721,任意一个数x,x^(k+48)%mod=x^(k)%mod。于是只要对每个数记录进行0~47次取立方操作后
得到的结果就行了。


CF 390E  可以先将要算的结果转化一下,然后发现只要独立地维护x和y的情况就可以了。


CF 387E  二分+树状数组/线段树。由于需要动态的维护序列的上下界,一种常见的做法是二分+set。


CF 391D2 这题可以水过,直接枚举横线二分找到满足要求的竖线带优化的扫过去就能过。想到了二分答案之后其实不是很难,不过写了我很
久。根据y轴排序后枚举横线,然后可以保证每条横线,竖线扫1遍左右。不过我用了优先队列优化,解法很多,别人的做法我没仔细看。我
用的树状数组+优先队列。


CF 377D  这道题目的官方解题报告给出的解法非常经典,现将问题转换成给定范围L,R 求最多的人数,然后转化成几何题用扫描线做。没
仔细看过其他人的做法,推荐看下官网的解法。
 
CF 323C  这题难度较大,不过解法并不麻烦,而且直接看人家的代码就可以看明白了。可以算出第一个数组中的数字在第二个数组中的位置
,设这个数组为pos[],那么问题就转化成了统计这个数组中大小在[l2,r2]之间的数字的个数。可以用线段树套数组来解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值