文章分类 -  数据结构——线段树

摘要:维护一个区间的包含最左的元素的LCIS,包含最右元素的LCIS,以及整个区间的LCIS, 然后pushup的时候就更新这三个值就行了。注意要考虑左右儿子可以“接”起来的情况等等 查询的时候要注意,也要考虑左右可以“接”起来时候,不过还要注意,有可能左右儿子边界的已经“越界了”,就是超过了查询范围,还 阅读全文
posted @ 2018-10-18 20:43 Patrickpwq 阅读(94) 评论(0) 推荐(0)
摘要:" 传送门 " Solution: 与上一题十分类似的,我们考虑维护一个节点的区间从左到右包含最左端点的最大值,以及从右到左的最大值,以及整体的最大值,以及当前区间的权值和。 不过方便一点,我们不用再去维护区间左右端点的值,因为有了区间的权值和,父节点的lmax=max(lson.lmax,lson 阅读全文
posted @ 2018-07-31 16:07 Patrickpwq 阅读(80) 评论(0) 推荐(0)
摘要:" 传送门 " Solution: 考虑在区间维护五个值: 一个是le 代表从左端点开始向右的最大01序列 一个是ri 代表从右端点开始向左的最大01序列 一个是all 代表整个区间最大的01序列(可以不含左,右端点) xl 代表区间左端点的值 xr 代表区间右端点的值 这样之后,每次push_up 阅读全文
posted @ 2018-07-31 15:35 Patrickpwq 阅读(253) 评论(0) 推荐(0)
摘要:" 传送门 " 只需要对懒标记做文章,每次xor1,并且我们可以发现,一个区间xor1后权值和变为了l r+1 sum,知道这两个这道题就可做了。 cpp include define N 200005 using namespace std; int n,m,a[N]; struct node { 阅读全文
posted @ 2018-07-31 15:27 Patrickpwq 阅读(162) 评论(0) 推荐(0)