[置顶] 数据结构(线段树)训练

我数据结构都只会点基础,所以要做一波题了,整天刷图论也没用啊,碰到很难得还是做不出

线段树实在是太重要了啊,威武年神那天网络赛怒过一个只有9人过的线段树

然而我的线段树太水了,只能做做最基础的那种单点更新和成段更新

现在是时候怒刷一波线段树了,改日刷字符串,还有dp,燃烧

poj 2481

题意:给你n个区间,如果一个区间的左右都大于等于另外个并且长度大于另外个,则它大于那个,求每个区间比它大的区间的个数

题意:按照右端点从大到小,左端点从小到大,排序,然后最前面的肯定是最大的,并且保证他的右端点最大,所以就用树状数组存他的左端点,离线求一下就行了

这题G++就是TLE,用了读入优化都T,C++就过了

AC代码:http://paste.ubuntu.net/12520776/ 


线段树求解LIS的个数(可以重复取同一个元素)
题解:用make_pair,然后区间里维护最长的长度,和最长的个数,用值域插入
存取每个元素为结尾的LIS长度和个数,先更新每个元素,然后将元素插入,修改
左右区间的维护,如果左右的最长长度相等,就数量相加,否则就取最大的
询问时,按照询问的区间的大小,如果都在左边就返回左儿子,如果都在右边就返回右儿子,如果在中间就左右比较
AC代码: http://paste.ubuntu.net/12600186/

你可能感兴趣的:([置顶] 数据结构(线段树)训练)