线段树
小白菜又菜
这个作者很懒,什么都没留下…
展开
-
nyist 600 - 花儿朵朵
题目:给定很多花的开花时间段,询问某一时间点有多少朵花儿开放。分析:线段树、离散化。利通每朵花的开花时间段的端点值将时间轴分割成区间段,则操作以每个区间段为整体进行。分割又两种方案:1.端点各成一段,端点间各成一段;2.建立左闭右开的区间,每个区间从上一个顶点开始、到下一个顶点之前结束(开区间)。本题采用方案2,方案一需要生成4倍花儿的数量,而方案2只需要2倍花儿的数量,空间复杂度会降低一倍。原创 2012-11-18 12:01:26 · 884 阅读 · 0 评论 -
UVa 11402 - Ahoy, Pirates!
题目:给定一个01串,对串的某些区间进行:变0、变1、取反和查询操作。分析:线段树、离散化。经典的线段染色的变形。区间大小1000000,查询操作1000,如果直接建立1000000的区间的线段树,在上面操作会TLE。因为查询只有1000个,那么利用查询的端点将区间划分成最多4001段(每个端点各是一段、相邻端点间的部分各是一段)。对于所有操作,每段都可以看做一个整体。因此,通过离散化可以建立原创 2012-11-18 02:05:31 · 1892 阅读 · 0 评论 -
UVa 11297 - Census
题目:给定一个矩形的数组,在不断更新的过程中查询最值。分析:线段树。利用矩形的左上和右下2个顶点代表对应的矩形,建立矩形树。把每个矩形分成四个小矩形。设x3=(x1+x2)/2;y3=(y1+y2)/2,则矩形{(x1,y1),(x2,y2)}的四个孩子分别为{(x1,y1),(x3,y3)},{(x1,y3+1),(x3,y2)},{(x3+1,y1),(x2,y3)},{(x3+1,y3+原创 2012-11-15 23:12:57 · 1551 阅读 · 0 评论 -
UVa 11235 - Frequent values
题目:查询某非递减序列,某些区间中的众数出现的个数。分析:线段树、离散化。把相同的数字看成一个节点,建立不等分区间树。区间树的节点储存:区间的端点和此区间中的众数的个数。注意:离散化后并不经过映射建立等分线段树,而是利用原序列中的重复元素的端点建立区间树。#include #include #include #include using namespace std;i原创 2012-11-15 02:01:20 · 1473 阅读 · 0 评论 -
UVa 297 - Quadtrees
题目:利用四叉树处理图片,给你两张黑白图片的四叉树,问两张图片叠加后黑色的面积。分析:搜索、数据结构。把图片分成1024块1*1的小正方形,建立一位数组记录对应小正方形的颜色。 利用递归根据字符串,建立相应四叉树。在建树的过程中,树节点计算当前节点对应的小正方形 编号区间。这里处理类似于线段树,将父节点的区间等分成4份分别对应四棵子树的编号区原创 2013-10-15 01:44:28 · 3352 阅读 · 0 评论 -
UVa 1428 - Ping pong
题目:从一串数字中选出三个有序的三元组,问有多少种取法。分析:数据结构,树状数组。利用树状数组求每个数字两侧大和小的数字的个数为线性。 ①按照插入顺序求解data[i]左边比它小的数字记为Lsmall[i]; ②则data[i]左边比他大的数字为i-1-Lsmall[i],记为Lbiger[i]; ③所有元素插入后,原创 2015-11-03 10:10:56 · 767 阅读 · 0 评论 -
UVa 12086 - Potentiometers
題目:已知一個序列,有兩種操作S x y:將第x各元素替換成y,M x y:求第x倒第y各元素的和。分析:數據結構,樹狀數組。區間操作直接用樹狀數組或線段樹。說明:╮(╯▽╰)╭。#include #include int data[200002];int C[200002];int lb(int x) {return x&-x;}int sum(int k) {原创 2016-01-19 15:38:26 · 987 阅读 · 0 评论 -
UVa 12532 - Interval Product
題目:已知N各數字X1~Xn,執行兩種操作:1、改變Xi為A;2、求區間[L,R]上元素乘積的符號。分析:DS,線段樹。利用線段樹處理即可,每個數字正的取1,負的取-1,否則取0。說明:╮(╯▽╰)╭。#include #include #include int data[100001];//segment_tree__begintypedef struct tnode原创 2016-08-03 14:23:48 · 558 阅读 · 0 评论 -
UVa 11683 - Laser Sculpture
题目:利用激光切割机切削一个矩形的材料,每次只能从上向下切掉1mm后的矩形, 问切削成如下给出的形状需要切削多少次。分析:线段树,数据结构。将图形看成是二叉树,从上往下按最高的点分段即可。 整个切削过程遇到极大值点就会分成两段,就是一个构造二叉树的过程; 这里不用构造树,利用递归分别计算分段的两个子树即可;原创 2017-07-24 16:38:44 · 378 阅读 · 0 评论