您的位置:首页 > 理论基础 > 数据结构算法

数据结构(线段树)训练

2015-09-22 20:26 183 查看
我数据结构都只会点基础,所以要做一波题了,整天刷图论也没用啊,碰到很难得还是做不出

线段树实在是太重要了啊,威武年神那天网络赛怒过一个只有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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: