HDU - 4417 Super Mario
题意:
有n个数,m次询问,每次询问 L R k,求在区间 [L,R] 中小于等于 k 的数有多少个。
思路:
用主席树来维护,每次只需要找到序列 b 中第一个等于 k 的数,那么要求的数必定在 b[1]~b[upper_bound(k)] 这个范围内,接下来就像线段树统计区间个数那样,若完全包含则直接加上 t[r].sum - t[l].sum 。否则就分两边递归统计。
一开始用求区间第 k 小模板写的,改了半天才知道是要 区间统计。。。
主席树
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
树状数组
以数组的下标建立树状数组,把询问 和 每个点值 从小到大排序,在每一次查询前把比查询值小的值的下标加入树状数组,在查询一下在范围内有多少个
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include