考虑到数字只有n个,那么每次询问的答案肯定在 [ 0 , n + 1 ] [0,n+1] [0,n+1]范围内,所以对于值大于n+1的元素无需考虑。
前缀主席树,每个主席树维护权值最后一次出现的位置,那么对于查询 [ l , r ] [l,r] [l,r]就是查找第r棵树上出现位置小于 l l l的权值,那么只需要维护最后一次出现位置的最小值即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+7;
struct Tree{
int lc,rc,minn;
}tree[maxn*30]