由此可以想到将l,r,p合起来离散化,从左往右扫描,遇到l,就在权值线段树上插入对应的val,遇到r就删除对应的val,而遇到询问时,当前的线段树必然对应了P点的所有线段,求一下全局第k小就能得到答案。 全局第k小除了利用权值线段树外,还能通过二分树状数组求得,复杂度比线段树多logn,但是实际测试好像还是树状数组快。
【Gym 102134-E】Kth subtree【权值树状数组、二分统计第k大+dfs离线操作】,程序员大本营,技术文章内容聚合第一站。
<法二>权值分块。我会说比树状数组还快将近一倍? 1#include<cstdio>2#include<cmath>3#include<algorithm>4usingnamespacestd;5intn,x[15001],y[15001],LIMIT,r[200],l[200],num[33000],sumv[200],sz,sum,rank[33000],b[33000];6voidmakeblock()7{8sz=(int)sqrt((double)LIMIT);if(!sz) sz=...