题意:给n个对象 每个对象有坐标和能量两个变量 有c次查询 每次查询是关于输出每个坐标的能量值与坐标为当前坐标-len到当前坐标-1的所有对象的能量的关系(大于?小于)
相对比较水的一道题 有很多种方法可以做 一开始我是用纯线段树完成的 直接维护每个区间的最大最小和平均值 直接查询 但是错误以为他的平均值是整数向下取整算的 然而实际是用double+误差eps来确定与平均值关系 WA了很多次test 2 受思维定势影响吧:
AC代码:
#include
#include
还有比较好的一种做法是用单调队列 因为每次维护都是维护以当前点-1位为终点的长度为某个定值的最大最小和平均值 这正是单调队列可以解决的经典问题 每次如果队头元素位置过小就从队头弹出 然后如果队尾的元素比当前元素大或小就弹出队尾 在队尾插入当前元素
总结一下 单调队列一般用来解决那些线性时间查询某个区间的最值问题 单调栈的话一般是询问以某一点为中心 向左或向右寻找第一个比他大或者小的元素的位置