题目如下:
给定一个序列,有多次询问,每次查询区间里小于等于某个数的元素的个数
即对于询问 (l,r,x),你需要输出 的值
其中 [exp] 是一个函数,它返回 1 当且仅当 exp 成立,其中 exp 表示某个表达式
这个题可以使用两种方法来解决:
树状数组:由于每一个数都有其地址的编号,所以先记录没个数的编号,然后对这组数进行排序,对于(l, r,x)进行对多次输入也分别记录他们的地址,这样就可以分别输出符合条件的数,然后就是树状数组的基本更新和求和操作。每一次比较的是比较val,但是更新的是他的编号,这样就可以直接查询不怕出现错误;
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
线段树的方法:
线段树和树状数组的操作是一样是的,都是值比较大小然后把他的地址更新:然后使用区间求和得到值:
#include
#include
#include
#include
#include
#include
#include
#include
脑子要变通,不能太死板: