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]之间的数字的个数。可以用线段树套数组来解决。
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]之间的数字的个数。可以用线段树套数组来解决。