线段树
CoderFly
如果现在不努力,那跟咸鱼有什么区别。
展开
-
UVA11992 线段树
因为行数最多20行,所以可以每行建造一颗线段树update时 set操作要清除add标记但add操作不需要清楚set标记maintain函数(用于维护节点)先考虑set再考虑addquery操作要综合考虑add和set{CSDN:CODE:1909506}原创 2016-10-01 08:40:44 · 525 阅读 · 2 评论 -
UVA1400&LA3938 线段树
构造线段树每个节点维护三个值 max_pre 满足当前线段最大前缀和的右端点编号 max_suf 满足当前线段最大后缀和的左端点编号 max_sub 用pair维护满足当前线段最大连续和的两个端点编号 维护max_sub 有三种情况 左右端点都在 左子节点 max_sub等于左子节点的max_sub 左右端点都在 右子节点 max_sub等于右子节点的max_sub 左端点在 左子原创 2016-09-30 10:30:41 · 359 阅读 · 0 评论 -
LA4108&UVA1232 线段树
大体思路 维护区间最大值最小值,当新建的建筑物高度大于等于区间最大值时更新同时更新答案,小于最小值忽略. (x+1是因为 区间1~5可以看成 2,3,4,5 四个点 只写x 更新会出错 是因为 更新1~10更新一遍10 更新10~15又会更新一遍10事实上只要更新一遍)#include<bits/stdc++.h>using namespace std;const int maxn=1e5+原创 2016-11-20 21:56:47 · 413 阅读 · 0 评论 -
LA4730 UVA1455 线段树+并查集
以y轴建线段树 把坐标*2 初始化各节点 洲,城市 数目为0 并查集维护每一个连通块的 y坐标最大值最小值(x坐标没用)城市数目 合并时 如果是一个洲(城市数大于1) 线段树对应区间减掉该洲城市数 然后将两个洲合并,再在线段树对应区间增加大洲的城市数 (区间城市数不等于子区间城市数之和)#include <bits/stdc++.h>using namespace std;const in原创 2016-11-20 22:14:02 · 364 阅读 · 0 评论 -
UVA1492 LA5694 线段树扫描线(矩形面积合并)
我们考虑 每个新机器往右放的起始点(1*1的块)那么我们只要求出哪些位置不可以放就可以了,比如说 3*3 的矩阵 新机器长为2 旧机器在2 2 那么 1 1这个点就不可以放新机器(考虑机器往右放的起始点)再考虑右边界,右边界左边m-1个位置也不可以放再考虑往下放的起始点,同理了综上我们只要分别求出 哪些点不可以放 再用所有点减去就可以了其实这就转化成了求矩形面积合并的问题了注意特判m=原创 2016-11-20 22:26:10 · 590 阅读 · 0 评论