1#include"../../kyopro_library/template.hpp"
11 mx=*max_element(
ALL(v)),mn=*min_element(
ALL(v));
12 dat=vector<vector<T>>(n<<1);
13 for(
int i=0; i<n; i++) dat[n+i]={v[i]};
14 for(
int i=n-1; i>0; i--) {
15 merge(
ALL(dat[i<<1]),
ALL(dat[i<<1|1]),back_inserter(dat[i]));
25 if(l&1) ret+=LB(dat[l],val),l++;
26 if(r&1) --r,ret+=LB(dat[r],val);
52 T
kth(
int l,
int r,
int k) {
64 vector<vector<T>> dat;
int count_lt(int l, int r, T val)
区間 [l, r) に存在する val 未満の値の個数を返す
int count_le(int l, int r, T val)
区間 [l, r) に存在する val 以下の値の個数を返す
int count_gt(int l, int r, T val)
区間 [l, r) に存在する val より大きい値の個数を返す
T kth(int l, int r, int k)
区間 [l, r) の小さい方から k(1-indexed) 番目の値を返す
int count_ge(int l, int r, T val)
区間 [l, r) に存在する val 以上の値の個数を返す
MergeSortTree(const vector< T > &v)
配列 v からマージソート木を構築する