hdu5919 Sequence Il 主席树
题目链接 题意 给出一个序列,问区间[l, r]中所有不同元素出现的第一个位置(取最左)组成的序列中的第k/2个,k是区间不同数的个数。 第i个询问区间依赖于第i-1个询问的答案,所以是强制在线的。 思路 区间第k个,显然是主席树,和查询区间不同数的个数一样,都是相同的数只取一个,但这个是取相同数的最前面一个,所以在建树的时候倒过来建就可以满足要求,然后要查询位置第k/2的数的位置,所以先求出这个区间[l,r]内不同数的个数,然后直接询问区间第k/2就可以。 # include <bits/stdc++.h> using namespace std ; const int maxn = 2e5 + 7 ; typedef long long ll ; int n , m , root [ maxn ] , cnt ; struct node { int l , r , sum ; } T [ maxn * 40 ] ; void update ( int l , int r , int & x , int y , int pos , int C ) { T [ ++ cnt ] = T [ y ] ; T [ cnt ] . sum + = C ; x = cnt ; if ( l == r ) return ; int mid = ( l + r ) >> 1 ; if (