
线段树
文章平均质量分 65
Aerolite坠落
这个作者很懒,什么都没留下…
展开
-
POJ 3468 A Simple Problem with Integers(线段树区间更新)
题目地址:POJ 3468打了个篮球回来果然神经有点冲动。。无脑的狂交了8次WA。。居然是更新的时候把r-l写成了l-r。。。这题就是区间更新裸题。区间更新就是加一个lazy标记,延迟标记,只有向下查询的时候才将lazy标记向下更新。其他的均按线段树的来就行。代码如下:#include #include #include #include #include using n原创 2014-08-08 19:38:29 · 921 阅读 · 0 评论 -
POJ 3277 City Horizon(线段树+扫描线+离散化)
题目地址:POJ 3277水题。。稍微处理一下然后用求面积并的方法求即可。代码如下:#include #include #include #include #include #include #include #include #include #include #include using namespace std;#define lson l, mid,原创 2014-08-12 17:57:13 · 1232 阅读 · 0 评论 -
codeforces #261 D题 Pashmak and Parmida's problem(线段树+离散化)
题目地址:http://codeforces.com/contest/459/problem/D这个题攒了好长时间了,一直也没看。。今天看了下,也不难。当时做的时候明明还有半个多小时可以看这题的,但是。。由于某些人的打扰。。我一直在应付着拒绝。。所以这题当时连看都没来得及看。。以后做CF果断不上QQ了。。。这题就是求逆序数。需要先预处理每个点的左边与右边与之相同的数的个数。然后用线段树去求原创 2014-08-31 17:20:17 · 1172 阅读 · 0 评论 -
Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)
题目地址:http://codeforces.com/contest/474/problem/F由题意可知,最后可以留下来的一定是区间最小gcd。那就转化成了该区间内与区间最小gcd数相等的个数。区间最小gcd一定小于等于区间最小值,所以只要求最小值的个数。然后用r-l+1-个数即可。对于以上信息,可以用线段树来维护。分别维护区间gcd,区间最小值以及区间最小值的个数。代码如下:#原创 2014-10-08 18:39:44 · 1223 阅读 · 0 评论 -
Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E第一次遇到这种用线段树来维护DP的题目。ASC中也遇到过,当时也很自然的想到了线段树维护DP,但是那题有简单方法,于是就没写。这次终于写出来了。。这题的DP思想跟求最长上升子序列的思想是一样的。只不过这里的找前面最大值时会超时,所以可以用线段树来维护这个最大值,然后由于还要输出路径,所以要用线段原创 2014-10-09 12:53:05 · 1093 阅读 · 0 评论 -
HDU 4521 小明系列问题——小明序列 (线段树维护DP)
题目地址:HDU 4521基本思路是DP。找前面数的最大值时可以用线段树来维护节省时间。由于间隔要大于d。所以可以用一个队列来延迟更新,来保证每次询问到的都是d个之前的。代码如下:#include #include #include #include #include #include #include #include #include #include #i原创 2014-11-12 21:47:29 · 1192 阅读 · 1 评论 -
HDU 5172 GTY's gay friends (线段树)
题目地址:HDU 5172比赛的时候用一个维护了区间和,区间积,区间最值的线段树水过去了。。赛后数据改回10^6后,就TLE了。。正解是区间和用前缀和维护就可以。然后维护一个该位上的数上一个出现额位置,那么每次查询,如果每个数的上一个出现的位置都小于l的话,那么就说明没有重复的,如果区间和符合全排列的和,那么就说明肯定是一个全排列了。代码如下:#include #include原创 2015-02-11 15:45:09 · 1184 阅读 · 2 评论 -
HDU 5195 DZY Loves Topological Sorting (拓扑排序+线段树)
题目地址:HDU 5195 简直受不了了。。BC第二题都开始线段树+拓扑排序了。。。 这题很容易想到拓扑排序过程中贪心,但是贪心容易TLE,所以需要用数据结构去维护,我用的是线段树维护。每次找入度小于等于k的编号最大的点,这样就可以保证字典序一定是最大的。 代码如下:#include <iostream>#include <string.h>#include <math.h>#inclu原创 2015-03-30 15:46:57 · 940 阅读 · 0 评论 -
(山东省第一届省赛 I 题) SDUTOJ 2159 Ivan comes again! (线段树+set)
题目地址:SDUT 2159 这题的数据很水。。几乎所有人都是水过去的。。网上也没找到正解,全是水过去的。于是我来第一发正解23333。 首先,可以想到的是先离线下来,然后对行离散化,然后对于每行的所有列用set去存,那么怎么去找最小的行有大于给出列的列数呢?这时候线段树就可以登场了,用线段树来维护每一行的出现的最大列,这样就可以用线段树去搜了。然后删除添加操作同原创 2015-04-05 10:35:12 · 1282 阅读 · 0 评论 -
HDU 3333 Turing Tree (离线询问+线段树)
题目地址:HDU 3333 将询问离线保存下来,然后将数组的点离散化,记录每个值上一次出现的位置。然后枚举数组的数,若当前枚举的数前面出现过,那么就删掉前面出现过的那个位置上的数,更新当前这个位置上的数,然后那些所有询问的右端点为当前位置的就可以通过查询来得到结果了。 更新与查询用线段树来优化。 代码如下:#include <iostream>#include <string.h>#inc原创 2015-05-06 17:06:10 · 1089 阅读 · 0 评论 -
Codeforces Round #310 (Div. 1) C. Case of Chocolate (线段树)
题目地址:传送门 这题虽然是DIV1的C。。但是挺简单的。。只要用线段树分别维护一下横着和竖着的值就可以了,先离散化再维护。每次查找最大的最小值<=tmp的点,可以直接在线段树里搜,也可以二分去找。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm原创 2015-06-29 21:03:52 · 1119 阅读 · 0 评论 -
ZOJ 3886 Nico Number (线段树)
题目地址:ZJU 3886 这个题需要想到一点,因为对一个数x不断取模的话,而且设定他小于模才会进行取余操作的话,那么最多只会进行logx次,因为每次取模都会使x最少折半。然后想到了这点就很好做了。对于区间取模更新操作可以直接暴力更新,维护一个最大值,如果这个区间的最大值小于模的话, 就不用继续向叶子更新了。然后其他的大于模的就更新到叶子节点。 然后对于NicoNumber来说,只有6,2的幂次原创 2015-07-27 20:47:02 · 1064 阅读 · 0 评论 -
HDU 1828 && POJ 1177 Picture(线段树+扫描线+离散化)
HDU题目地址:HDU 1828 POJ题目地址:POJ 1177这题是求周长并,我用的方法可能有点麻烦。。是先求横着的线,再求竖着的线。每次只要求出每次的总区间覆盖长度,然后每次累加这次的总区间覆盖与上次的总区间覆盖长度的差的绝对值。因为只有长度发生变化时,才会产生一段新的周长。待会再试试只扫描一次的方法。此博客有待更新。代码如下:#include #include #in原创 2014-08-12 21:05:12 · 1088 阅读 · 0 评论 -
POJ 2528 Mayor's posters(线段树+离散化)
题目地址:POJ 2528这题错了无数遍。。。最后看了看hh大牛的博客才幡然醒悟。。要注意离散的区间问题问题啊。。这题是写完了几道扫描线的问题后才又拿起来做掉的。想当初离散化自己一直用的map。。写了几道线段树+扫描线之后,再写这道题明显顺手多了。下面直接引用hh大牛的话。。思路:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需要的值来用,比如说原创 2014-08-12 23:45:40 · 847 阅读 · 0 评论 -
HDU 1166 敌兵布阵(线段树)
题目地址:HDU 1166听说胡浩版的线段树挺有名的。于是就拜访了一下他的博客。详情戳这里。于是就完全仿照着胡浩大牛的风格写的代码。至于原理,鹏鹏学长已经讲的再清晰不过了。我就在下面的代码注释中将原理说明一下吧。来纪念第一发线段树。下面是代码+注释。#include #include #include #include #include using namespace s原创 2014-08-08 10:36:36 · 1227 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number(线段树求逆序数)
题目地址:HDU 1394这题可以用线段树来求逆序数。这题的维护信息为每个数是否已经出现。每次输入后,都从该点的值到n-1进行查询,每次发现出现了一个数,由于是从该数的后面开始找的,这个数肯定是比该数大的。那就是一对逆序数,然后逆序数+1.最后求完所有的逆序数之后,剩下的就可以递推出来了。因为假如目前的第一个数是x,那当把他放到最后面的时候,少的逆序数是本来后面比他小的数的个数。多的逆序数原创 2014-08-08 21:47:10 · 1020 阅读 · 0 评论 -
HDU 1698 Just a Hook(线段树区间替换)
题目地址:HDU 1698区间替换裸题。同样利用lazy延迟标记数组,这里只是当lazy下放的时候把下面的lazy也全部改成lazy就好了。代码如下:#include #include #include #include #include #include #include #include #include #include #include using na原创 2014-08-09 10:48:35 · 1128 阅读 · 0 评论 -
HDU 1754 I Hate It(线段树)
题目地址:HDU 1754原创 2014-08-08 15:38:29 · 727 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort(线段树+离散化)
题目地址:POJ 2299这题曾经用归并排序做过,线段树加上离散化也可以做。一般线段树的话会超时。这题的数字最大到10^10次方,显然太大,但是可以利用下标,下标总共只有50w。可以从数字大的开始向树上加点,然后统计下标比它小即在它左边的数的个数。因为每加一个数的时候,比该数大的数已经加完了,这时候坐标在它左边的就是一对逆序数。但是该题还有一个问题,就是数字重复的问题。这时候可以在排序原创 2014-08-10 15:17:44 · 988 阅读 · 0 评论 -
codeforces #52 C Circular RMQ(线段树)
题目地址:http://codeforces.com/problemset/problem/52/C线段树区间更新水题。代码如下:#include #include #include #include #include #include #include #include #include #include #include using namespace st原创 2014-09-06 16:59:26 · 968 阅读 · 0 评论 -
POJ 2352 Stars(线段树)
题目地址:POJ 2352今天的周赛被虐了。。TAT..线段树太渣了。。得好好补补了(虽然是从昨天才开始学的。。不能算补。。。)这题还是很简单的。。维护信息是每一个横坐标的出现的次数。代码如下:#include #include #include #include #include #include #include #include #include #incl原创 2014-08-09 17:55:23 · 1096 阅读 · 0 评论 -
HDU 2852 KiKi's K-Number(线段树+二分)
题目地址:原创 2014-08-09 20:51:05 · 803 阅读 · 0 评论 -
POJ 2777 Count Color(线段树)
题目地址:POJ 2777我去。。延迟标记写错了。标记到了叶子节点上。。。。这根本就没延迟嘛。。。怪不得一直TLE。。。这题就是利用二进制来标记颜色的种类。然后利用或|这个符号来统计每个区间不同颜色种数。代码如下:#include #include #include #include #include #include #include #include #incl原创 2014-08-10 13:37:56 · 1084 阅读 · 0 评论 -
HDU 1255 覆盖的面积(线段树+扫描线)
题目地址:HDU 1255这题跟面积并的方法很像,只不过需要再加一个变量。刚开始我以为直接用那个变量就行,只不过判断是否大于0改成判断是否大于1。但是后来发现了个问题,因为这个没有下放,没延迟,比如,在父节点上加了一次1,在该父节点的子节点上又加了一次1,但是这时候所有的结点仍然没有达到2的,但是实际上子节点已经达到2了。这时候可以再加一个变量。那个变量用来保存覆盖数大于等于0的情况,这样原创 2014-08-12 08:48:51 · 1069 阅读 · 0 评论 -
HDU 1542 && POJ 1151 Atlantis(线段树+扫描线)
题目地址:HDOJ地址:HDU 1542 POJ 地址:POJ 1151第一发扫描线。。费了好大一番功夫。。构思用了半天。。写出来调试成功用了半天。。。真是弱渣。。所谓扫描线就是从上往下或从下往上扫描,每到一个边,就进行增或删的处理。最后出来的值就是总的面积。对于求面积并的问题,可以参考这篇博客(博客地址),讲的不错。具体实现过程是用lazy标记此时的边数量,如果大于0,说明这个地方原创 2014-08-11 17:07:17 · 1039 阅读 · 0 评论 -
HDU 4630 No Pain No Game (线段树离线查询)
题目地址:HDU 4630 这题一看数据范围,于是一直在思考n*logn的算法。。实在没想到好方法,找了找题解,发现都是用的n*sqrt(n)*logn的方法。。。算了算,这个复杂度的确可以过。。好吧。。 然后就可以先离线下来将询问按r值排序,然后枚举每个数,并且用sqrt(n)的方法枚举所有的约数,然后对于每个约数,对最近的一次出现的这个约数的地方进行更新。因为对于当前区间来讲,只要最近的这个原创 2015-07-28 10:37:24 · 889 阅读 · 0 评论