题意为给定n(n<=100000)个数字,然后给出m(m<=50000)个询问,每次询问在[i,j]区间内的第k大的数字是多少。
用SBT的方法做就是先把m个询问按照起点从小到大排序。对于每个询问区间[i,j],要调整SBT中的元素,使得树中只有[i,j]中的全部元素,多余元素删除,然后就可以求得树中第k大的数。代码就当模板了。哪里有错误希望大家指出,谢谢。
SBT理论知识详见陈启峰大牛的论文。
这里有论文的中文版。
POJ2761_SBT