题意:一个1-n的全排列,进行m次局部排序(选定一个区间,升序或降序排序),最后求第q位置上数字。
这道题有个咸鱼做法:二分数字,转化为01序列然后就很好办了。但是这样时间要多一个log而且不支持在线。
而如果使用线段树合并的话,就可以不用最后求,而是随时求q位置数字了。
对每个操作区间建立一棵权值线段树,并且记录当前顺序是升序还是降序,操作一个区间时,先找到包含该区间一部分的权值线段树,将两端多出去的地方割裂(要用到线段树分裂),然后一个个合并起来。对于每个区间的开头我们用一个set存储,这样可以实现快速插入删除区间。
注意分裂的时候没有下传l与r端点,所以k值等于左儿子size的时候就不要下传了,以免陷入死循环。