数据结构(线段树)训练
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/
线段树实在是太重要了啊,威武年神那天网络赛怒过一个只有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/
相关文章推荐
- most of 1-1000
- MongoDB学习笔记~数据结构与实体对象不一致时,它会怎么样?
- 基本数据结构:栈(stack)
- 基本数据结构:链表(list)
- 第四周项目三数据结构实践(一)——单链表:逆置
- 项目4 -- 链表算法库 程序的多文件组织形式
- 项目3 -- 单链表的应用(3)
- 项目3 -- 单链表的应用(2)
- 第四周项目二数据结构之自建算法库——单链表
- 各类数据结构的特点
- OpenCV的IplImage数据结构的各成员变量的含义
- HDU 1237(简单计算器)栈的应用-表达式求值
- 栈的应用-表达式求值-数据结构
- COJ1013 WZJ的数据结构(十三)
- 数据结构笔记#二分法查找
- ACdream 简单数据结构 专题
- 数据结构_线性结构_线性表
- I Hate It
- 数据结构之简易版hashmap
- 数据结构学习:KMP模式匹配算法