线段树 学习记录

来源:互联网 发布:心理学实验软件 编辑:程序博客网 时间:2024/06/05 02:23

SPOJ KGSS Maximum Sum

题意:两个操作,向数组更新一个数,查询一个区间内两数之和的最大值

题解:维护区间最大值和第二大值

代码:传送门


HDU 3333 Turing Tree

题意:查询区间内不同数的和值

题解:我们先记录要查询的区间,并按照区间右端点从小到大排序,然后一边查询一边添加点,每次只添加当前查询区间内的点,每添加一个点时,若其之前出现过,则将之前的点删除,并更新,用map维护就可以了

代码:传送门


HDU 4302 Holedox Eating

题意:一个虫子在管道上趴,他会选择最近的蛋糕去吃,若有多个一样距离的,他会选择跟之前移动方向一样的那个,现有俩操作,一个放蛋糕,一个吃,问他共移动了多少距离

题解:这题可以用set,也可用优先队列,这里用线段树,维护区间内是否有值,在查询是,我们只要查询虫子当前位置pos的左区间[0,pos]的最大蛋糕位置和右区间[pos,n]内的最小蛋糕位置,这样左区间最大值时,优先查询当前区间的右半区间,若无值才查询左区间,同时,当查询时找到一个值时,我们可以保证这个值是最大的。查询右区间同理。

代码:传送门


UESTC 1059 秋实大哥与小朋友

题意:单点查询

题解:这题线段树没什么特别的,就是数据范围太大需要离散化,别的倒没啥

代码:传送门


UESTC 1259 昊昊爱运动 II

题意:查询区间内不同值的个数

题解:这题跟上面那题HDU3333乍一看很像,但是因为上面那个并不是动态加点的,但是本题是一边加点一边查询,所以我们这里选择bitset来统计不同值的个数.

代码:传送门

0 0