题目描述
样例
input:
5 1
1 5 3 4 2
1 3 2
output:
3
分析
静态区间第k大,用主席树。在一般的线段树中,查找整段的第k大的数,可以用权值线段树。
然后在主席树中,要求一段区间l,rl,rl,r的第k大,只要用前缀和的思想,对于每一层,只要将kkk与lvr+1−lvllv_{r+1}-lv_llvr+1−lvl比较,并相减就可以了,其他操作一样。
然后解决最后一个问题:字典序。
可以先用string读入,然后sort先排好,在用一个数组将其大小离散化成数字就可以了。
注意如果用cin和puts(因为有-1的情况,很多人喜欢直接puts),千万要注意,不要取消同步流
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e5+10;
struct node