线段树
拔光祖国小草
存放一下做的题。
展开
-
ZOJ 2671 (线段树+矩阵乘法)
这题着实是锻炼线段树的一个好题,纯模板题但是加上了一点其他的东西,细节很多细节一:格式错误,每两个一大组数据和之间需要有有一个换行。细节二:每两个输出之间有一个换行细节三:每次需要清空存储矩阵的结构体(但是我不是特别明白为什么要清空)#include #include #include #include #include #include #include #incl原创 2017-07-06 21:23:31 · 324 阅读 · 0 评论 -
线段树整理
主要是记录一下线段树的写法,包括建树、区间查询、单点更新 以后就统一用这个写法了,很清楚#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cstdio>#include <cmath>#include <map>#include <set>#include <que原创 2017-10-10 23:19:18 · 149 阅读 · 0 评论 -
codeforces 899 F - Letters Removing (线段树)
题意:给你一个长度为n的字符串,只包括大小写字母与数字,还有q个操作,对于每个操作 将[l,r]区间内删除字符ch题解:对于这个操作l,r,是之间操作完的串的l,r,也就是你还需要找到原始串中的l,r 方法是开62个线段树,每一个维护区间和,那么对于如何寻找原来的l,r,进行前缀和的二分查找,前缀和等于l的地方就是原始串中l的地方这题把我折磨死了= =。 62个线段树刚好卡在内存附近,打的lazy原创 2017-12-25 21:32:05 · 295 阅读 · 0 评论 -
HDU5861 (线段树区间更新+单点查询)
题意:有n个村庄,每相邻两个村庄之间的路有一个费用,有m个查询,查询从l走到r需要的最小费用,保证l走到r时所有的路需要打开,每条路只能打开和关闭一次。题解:因为只能打开和关闭一次,所以我们离线维护每条路最早的打开时间和最晚的关闭时间,那么对于每一个查询的l-r,可以用线段树区间赋值i,表示第几天开启,并且更新天数的最大最小值。nlogn可以解决第一个问题。那么对于每一天,我们维护一个当天需要开启的原创 2017-12-18 13:32:08 · 398 阅读 · 0 评论 -
HDU5692(dfs + 线段树)
题解:是个好题,对于经过某一点的最大值,可以将某一点作为根,他的子树中到0的最大值即为解。那么这样,可以用dfs跑出一个序,即当前点到0的值,每个点维护一个L,R区间,那么这个区间的点就是它的子树。对于单点更新一个值,那么就变成区间更新,更新这个点L,R区间所以点的值,对于查询,就是L,R区间中的最大值 (注意LL和INF)#include <iostream>#include...原创 2018-03-13 17:35:09 · 214 阅读 · 0 评论 -
FZU 2277 (dfs序+线段树)
用dfs序可以维护出所有子节点 对于更新,我们将更新变为deep[i]k−deep[j]kdeep[i]k−deep[j]kdeep[i]k - deep[j]k,deep[j]kdeep[j]kdeep[j]k就是当前自己的深度,是可以直接计算的,那么对于deep[i]kdeep[i]kdeep[i]k,就是父亲节点的深度,另外别忘了还有xxx,所以我们对于父亲节点的所有儿子首先更新x+dee...原创 2018-04-13 09:39:50 · 330 阅读 · 0 评论