线段树
kalilili
双眼闭三年。
展开
-
POJ 2528 Mayor's posters (hash+线段树成段更新)
题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度。现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且思路:简单的成段更新,但是数据量是1千万,会MT,所以要区间压缩(离散化),保证覆盖的关系不变,离散化的时候有个易错的细节,poj数据水了,这个易错点引用hh牛的话:而这题的难点在于每个数字其实表示的是一个单位长度(并非一个点),这样普通的离散化会造成许多原创 2015-02-19 16:03:47 · 670 阅读 · 0 评论 -
HDU 2852 KiKi's K-Number(动态过程求第K小数)
题意:给出三种操作,0 在容器中插入一个数。1 在容器中删除一个数。2 求出容器中大于a的第k大元素。思路:可以用树状数组和线段树,显然a[1]+...+a[i]随i有明显的单调性,所以可以二分出答案线段树时间复杂度比树状数组的常数大了几倍...所以线段树擦边过了还有另外一种思路:二分只是二分出a[1]+...+a[i]的上界i,所以可以逆向考虑,从a[1]开始累加原创 2015-02-25 21:26:56 · 536 阅读 · 0 评论 -
HDU 4046 Panda(RMQ 线段树 树状数组)
题目大意:在一串字符串中某个区间查询wbw的数目,更新某个位置的字符思路:线段树,每个枝结点记录以这个点为中心的字符是不是wbw,所以每次某个位置更新的时候,左右两个位置均要更新而且查询的时候某个区间的wbw的个数,位于边界的字符的值不能算在内//561MS 3400K 3373 B #include#include#include#includeusing namespac原创 2015-03-10 09:52:36 · 762 阅读 · 0 评论 -
Codeforces Round #254 (Div. 2) E. DZY Loves Colors(线段树 成段更新)
E. DZY Loves Colorstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputDZY loves colors, and he enjoys paintin原创 2015-05-26 23:34:08 · 666 阅读 · 0 评论 -
Codeforces Round #271 (Div. 2) F题 Ant colony(线段树求区间gcd)
F. Ant colonytime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputMole is hungry again. He found one ant colony,原创 2015-05-31 11:53:04 · 950 阅读 · 0 评论 -
CodeForces 228D. Zigzag(线段树暴力)
D. Zigzagtime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThe court wizard Zigzag wants to become a famous原创 2015-07-09 15:30:10 · 854 阅读 · 0 评论 -
SPOJ 375 Query on a tree(初学树链剖分)
QTREE - Query on a treeno tags You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, 3...N-1.We will ask you to perfrom some instructions原创 2015-07-07 23:12:21 · 1318 阅读 · 0 评论 -
Codeforces Round #250 (Div. 1) D. The Child and Sequence(线段树暴力)
D. The Child and Sequencetime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAt the children's day, the child原创 2015-08-05 23:24:01 · 1236 阅读 · 0 评论 -
Codeforces Round #337 (Div. 2) E. Alphabet Permutations (线段树lazy 或 set)
大致题意:一个2e5的字符串STR,最多包含K个字符(K 1. 把字符串[L, R]的字符修改成x2. 给一个K个字符的某个排列s,询问最少重复次数的s连接而成的长串的子序列包含STR思路1:因为要修改STR,所以要对STR进行处理,然后要在logn以下的复杂度完成查询操作。可以注意到最少重复的次数就是STR中相邻的两个字符(ch1, ch2) 在排列s中的位置是ch2在c原创 2015-12-29 00:24:11 · 639 阅读 · 0 评论 -
HDU 5919 Sequence II 主席树
题意:给定一个序列nn,有mm次查询,每次查询一个区间[l,r][l,r],求区间中每一种数在区间中第一次出现的位置的中位数,强制在线。如果考虑离线做法,从大到小枚举 rr,用线段树对每个 ll 维护[l,r][l,r]中数的种类数,查询时在线段树上二分,那么支持在线只需要简单可持久化一下,复杂度是 O((n+q) \log n)O((n+q)logn)。空间需要开原创 2016-10-14 00:01:48 · 636 阅读 · 0 评论 -
poj3468 A Simple Problem with Integers(线段树成段更新)
题意:给定一串数字,进行两种固定操作:一,求某区间内的和;二对某区间内的所以数加上一指定数字。水题//4824 KB 2563 ms#include#include#include#include#define ll long long#define M 100005#define root 1,n,1#define lson l,m,rt<<1#define rson原创 2015-02-17 23:41:27 · 555 阅读 · 0 评论 -
HDU 3308 LCIS(最长连续上升子序列)(线段树区间合并)
题意:给你n个整数,有两种操作,U A B把第A个数变成B,Q A B查询区间[A,B]的最长连续上升序列。思路:还是查询和更新操作,而且也是询问区间中满足条件的连续最长区间 ,所以是线段树区间合并类型的题,通法是开三棵线段树,一个记录此区间内的LCIS的最长长度,一个记录从左边第一个数开始的LCIS长度,另一个记录从右边最后一个数结尾的LCIS长度。然后试图找到父亲与儿子关系维护的递推关系式原创 2015-02-21 18:34:28 · 805 阅读 · 0 评论 -
Codeforces #291 (Div. 2) D. R2D2 and Droid Army(RMQ+二分)
题意:有n*m的矩阵,然后你有k发子弹。现在你可以朝着任意列发射子弹,每一发子弹都会使该列上的数值-1,最小减少到0。现在问你连续最长的行数,在k发子弹内,使得这些行上的数值全部为0.思路:简单的二分枚举最长行数区间,每个区间的最大值决定了要发射的子弹数,所以是RMQ问题,当然这里的枚举全部枚举,用尺取法也可以。//889 ms#include#incl原创 2015-02-19 16:15:32 · 920 阅读 · 0 评论 -
HDU1754 I Hate It(线段树单点更新)
Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。线段树功能:update:单点替换 query:区间最值//3172 KB原创 2015-02-17 23:14:32 · 578 阅读 · 0 评论 -
hdu2795 Billboard(线段树单点更新)
题意:有一块h*w的墙,有N个宣传单 每个的大小为 1*wi 每次贴都从最左最上能贴的位置开始。求每一宣传单被贴在哪一行。思路:线段树,以1~h划分区间,每一个区间中保存该区间能放下的最大长度,每次从最上面开始找,找到符合的位置 贴上,该位置减去len,更新区间的最大长度值。询问和更新一起操作//3152 KB 1903 ms#include#include#include#i原创 2015-02-17 21:56:58 · 514 阅读 · 0 评论 -
POJ 3667 Hotel (初遇线段树区间合并)
题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作,以2开头的是更新操作1 w 表示在总区间内查询一个长度为w的可用区间并且要最靠左,能找到的话返回这个区间的左端点并占用了这个区间,找不到返回0 2 a len , 表示从单位a开始,清除一段长度为len的区间(将其变为可用,不被占用),不需要输出。思路:这是第一次遇到线段树区间合并的题目,写下感原创 2015-02-19 00:10:17 · 867 阅读 · 0 评论 -
POJ 2352 Stars(树状数组 or 线段树)
链接:http://poj.org/problem?id=2352题目大意:在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0按照y递增,如果y相同则x递增的顺序给出n个星星,求出所有level水平的数量。思路:由于输入的顺序,对于第i颗星星,它的等级是之前输入的星星中,横坐标x小于等于i星横坐原创 2015-02-21 23:08:05 · 784 阅读 · 0 评论 -
线段树总结
这是某位大牛刷的线段树题目,类型分的很明确:出处http://blog.csdn.net/shiqi_614/article/details/8228102之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnlySuccess的博文“完全版线段树”里的大部分题目,其博文地址Here,然后也加入了自己做过的一些题目。整理时,更新了之前的代码风格,不过旧的代码仍然保转载 2015-02-16 10:46:18 · 1321 阅读 · 2 评论 -
HDU1394-Minimum Inversion Number(线段树单点更新)
题意:给你一段序列a1,a2,a3,a4,a5,a6,a7,,然后这段序列可以一直调动第一个数字到最后,例如:a2,a3,a4,a5,a6,a7,a1,…………直到循环了一遍。然后从这么多的序列中求出逆序列最小的一组。每次循环的时候都可以递归求解逆序对数:设原序列逆序数为sum, 当把原序列第一个移动到最后位置时,逆序数变为:sum = sum-(ai-1)+(n-ai);原创 2015-02-17 23:21:03 · 529 阅读 · 0 评论 -
hdu1166 敌兵布阵(线段树单点更新)
题意 n个阵营一字排开,每个初始有a[i]个人。现有两种操作: Q a b 查询[a,b]之间总人数并输出 A/S a b 在a号位添加/删除b个人线段树功能:update:单点增减 query:区间求和//1676 KB 312 ms#include#include#include#include#define maxn 5原创 2015-02-17 23:10:35 · 447 阅读 · 0 评论 -
Hdu1698 Just a Hook(线段树成段更新)
题意很简单:1-n个钩子初始价值是1,然后题目给出Q个操作,x y z,将x->y的钩子价值改为z,最后输出n个钩子的总价值。线段树功能:update:成段替换 (由于只query一次总区间,所以可以直接输出1结点的信息)//3160 KB 624 ms#include#include#include#include#define M 100005#define roo原创 2015-02-17 23:37:39 · 677 阅读 · 0 评论 -
Codeforces Round #368 (Div. 2) D. Persistent Bookcase(可持久化)
题意:一个n∗m矩阵A,维护4种操作:1 i j:把第A[i][j]赋值为12 i j:把第A[i][j]赋值为03 i:把A[i]的0变1,1变04 i:回到第i个操作之后的状态数据保证合法。 每个操作完成后输出整个矩阵1的个数。n , m 对操作离线的话,直接DFS一遍就好了,强制在线的话,用主席树可持久化,复杂度是 O( Q * (n / 32原创 2016-10-14 11:44:57 · 536 阅读 · 0 评论