题意
有n个纪念品,购买区间是\([l_i,r_i]\)。求每i(1~m)站停一次,可以买到多少纪念品。
题解
每隔d站停一次的列车,一定能买到购买区间的长度≥d的纪念品。
长度比d小但包含了d的倍数的纪念品也可以买到。 所以,如果按长度给纪念品排序,用树状数组维护长度小于当前d的购买区间,那么就可以很快求出每个停靠点(d的倍数)有多少个长度不超过d的纪念品了。代码
#include#include #define N 100001using namespace std;int n,m;struct souvenir{ int l,r,len; bool operator <(const souvenir &b){ return len
树状数组的英文名叫 Fenwick Tree