摘要: 添加 lsum[ ] , rsum[ ] , msum[ ] 来记录从左到右的区间,从右到左的区间和最大的区间;#include#define lson l,m,rty?x:y;}void pushup(int l,int r,int rt){ int m=(l+r)/2; lsum[r... 阅读全文
posted @ 2015-07-18 17:10 sweat123 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 由于坐标可能很大,此时需要离散化,将值转化为对应的坐标。#include#includeusing namespace std;#define lson l,m,rt=L&&R>=r) { sum[rt]=1; if(!mark[c]) { ... 阅读全文
posted @ 2015-07-18 15:46 sweat123 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 给n个数字 U表示第A个数改为B。A是从0开始。Q输出最大的递增序列个数。考虑左边,右边,和最大的。#include#define lson l,m,rty?x:y;}int min(int x,int y){ return x=p) updata(p,c,lson); e... 阅读全文
posted @ 2015-07-18 15:02 sweat123 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 求矩阵的并,也就是要求所有的面积。那可以吧总的图形按照矩阵来切割。使其为一块一块。输入的时候用坐标表示,这里扫描线从下到上扫描。初始时让下面的边为1,上面的为-1;用一条先从下面开始想上扫描。遇到更新线段树,加入该条边,为-1时就除去改变。这样从下到上一遍扫描就可以得到线段的长度。从下到上的过程中,... 阅读全文
posted @ 2015-07-18 14:18 sweat123 阅读(226) 评论(0) 推荐(0) 编辑
摘要: /* 不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么, 应该是,可以确定,这个区间被完全覆盖了1次, 而有没有被完全覆盖两次或以上则不知道无法确定,那么怎么怎么办了, 只要加上t[lch].s + t[rch].s 即,看看左右孩子区间被覆盖了一次或以上... 阅读全文
posted @ 2015-07-18 14:07 sweat123 阅读(167) 评论(0) 推荐(0) 编辑