![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
[数据结构]线段树
文章平均质量分 76
adnizna
这个作者很懒,什么都没留下…
展开
-
[PKU/POJ][3667][Hotel][线段树]
题目意思大概就是有一连串的房子。客人来时会要求订其中连续的 k 个房子,要你给出连续 k 个房子的最小编号。同时也会退订房间的操作。 用线段树来维护房子的订阅情况。线段树记录 4 个域。 struct Node{ int Lx; // 区间从左端点起连续的最大长度 int Rx; // 区间以右端点结束的最大连续长度 int Ax; // 区间全局...2010-04-26 14:00:36 · 83 阅读 · 0 评论 -
[PKU/POJ][2892][Tunnel Warfare][线段树]
题目意思为有一系列村庄,然后对一些村庄进行破坏或修复。让你求与某村庄直接或间接相连且都没有破坏的村庄数量。 对于每一个区间,用线段树维护从区间左端点开始的最大连续没破坏的村庄数量 Lx 以及以区间右端点结点的最大连续没破坏的村庄数 Rx,很容易更新这两个值及求出要求的数量。 代码: #include <iostream> #include <algorithm...2010-04-26 16:06:20 · 64 阅读 · 0 评论 -
[PKU/POJ][3162][Walking Race][线段树+树形DP]
1.给你一棵边带权的树,求出树中每一个点到其它点的最大距离。 2.在一个整数序列中找一个最大的连续序列,使得该序列中最大数和最小数之差不超过 m 。 问题 1 可用树形 DP 解决。对树进行 DFS,DFS 过程中,对根 R,记录他的孩子结点到他是最大距离和次大距离以及相应的结点。然后用一次 BFS 更新。 问题 2 用两个指针 head, tail分别指向连续序列的首尾,如果区间 [hea...2010-04-26 17:33:40 · 77 阅读 · 0 评论 -
[HUST][1022][K-diff subsequence][线段树+DP]
题意在一个整数序列中求出相邻元素相差不超过 m 的最长子序列。 易得到 dp 方程。 dp[i]= max{ dp[j]+ 1, 1<= j < i 且 d[i] 与 d[j] 相差不超过 m } 方程复杂度为 o(n^2) 。 用线段树对方程进行优化,先将数据离散化,使得数据范围变成 [1,n]。在上述方程求 dp[i] 的值时,对 i 前面的数遍历找出最优值相当于在区间 ...2010-04-26 17:53:13 · 73 阅读 · 0 评论 -
[codeforces][ball][线段树]
原题链接:http://codeforces.com/contest/12/problem/D 给一系列三维点(x,y,z)。求出满足以下条件的点个数: 对点 (x1,y1,z1 ) , 存在一个点 (x2,y2,z2) 使得 x2> x1, y2> y1, z2> z1。 先按 x 从大到小排序,再将 y 离散化。从前到向扫描,对于点(x,y,z), 在大于 y 的...2010-04-30 00:33:03 · 83 阅读 · 0 评论 -
[HDU][3397][Sequence operation][线段树]
这题杯具的写了一下午,真是太菜了。。 #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> using namespace std; int const N= 100010; int n, m; struct Node{...2010-05-01 20:40:52 · 55 阅读 · 0 评论 -
[HDU][3415][Max Sum of Max-K-sub-sequence][线段树]
原题意思是求一个不超过 k 的连续序列的和的最大值。 枚举连续序列的起点 i, 然后在 [i, i+k] 区间找一个最大值,更新答案。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define max(a,b) ( (a)> (b)? (a): (b) ) #...原创 2010-06-05 17:03:40 · 70 阅读 · 0 评论