sicily 1137 河床
2015-11-10 15:41
295 查看
线段树
题意:
给你一个n个元素的数组,和一个整数k.求一个符合以下条件的最大的区间
条件:区间里任意两个元素的差值不能超过k
数据范围:
n<=30000,k<=100,元素ai<=32676
思路:
暴力的话枚举每个左端点,然后往右扫,维护最大值和最小值,扫到使得max-min>k的时候就停止掉.这样做的复杂度理论上是O(n2).不过这里好像可以水过
正确的做法是用线段树.考虑某个固定的左端点,那么右端点的下标不断往右移的话,整个区间的max-min应该是递增的.也就是说,我们可以二分右端点,看这个区间的max-min是否<=k.
如何快速地求一个区间的max和min,线段树!那么,枚举左端点是O(n),二分右端点是O(logn),区间询问max和min是O(logn),总的复杂度就是O(nlognlogn)
总结:枚举左端点,二分右端点,线段树求区间max,min,判定max-min<=k
题意:
给你一个n个元素的数组,和一个整数k.求一个符合以下条件的最大的区间
条件:区间里任意两个元素的差值不能超过k
数据范围:
n<=30000,k<=100,元素ai<=32676
思路:
暴力的话枚举每个左端点,然后往右扫,维护最大值和最小值,扫到使得max-min>k的时候就停止掉.这样做的复杂度理论上是O(n2).不过这里好像可以水过
正确的做法是用线段树.考虑某个固定的左端点,那么右端点的下标不断往右移的话,整个区间的max-min应该是递增的.也就是说,我们可以二分右端点,看这个区间的max-min是否<=k.
如何快速地求一个区间的max和min,线段树!那么,枚举左端点是O(n),二分右端点是O(logn),区间询问max和min是O(logn),总的复杂度就是O(nlognlogn)
总结:枚举左端点,二分右端点,线段树求区间max,min,判定max-min<=k
相关文章推荐
- soj1005. Roll Playing Games
- soj1041. Pushing Boxes
- Sicily 1007 To and Fro
- 中大周赛 2014年每周一赛第二场 Meet and Greet
- sicily 3980 二进制转十进制
- 【SOJ1136】【cogs775】山海经
- SOJ--1117: 最大整数
- SOJ--Zig-Zag
- SOJ--4389: 川大贴吧水王
- SOJ--4393: LaoB's problem1
- SOJ 1321. Robot
- SOJ 1036. Crypto Columns
- SOJ 1310. Right-Heavy Tree
- SOJ 1022. Poor contestant Prob
- 1046. Plane Spotting
- How many 0's?
- 1003. Erdős Number
- 1428. B Baby Climber(心宝去爬山)
- 1509. Rails
- 1002. Anti-prime Sequences