bzoj3595 方伯伯的oj

有$n$个数,一开始是$1~n$,有$m$次操作

1.把编号为$x$的人编号改为$y$,保证$y$没出现过

2.把编号为$x$的人提到第一名

3.把编号为$x$的人怼到最后一名

4.查询排名为$x$的人的编号

初始每个人的排名 = 他的编号

 

sol:

考虑线段树,在叶子维护一个值$v$表示这个点上的编号是多少

全局维护两个变量lv,rv表示当前编号最小的是lv,最大的是rv

这样23操作就可以用lv和rv维护了

1操作就是两个单点修改

4操作就是查询当前有人的第k个叶子

可以维护一个size来搞

最后 我们保存每个人在线段树中的位置时要用map

 

posted @ 2018-10-06 16:05  探险家Mr.H  阅读(139)  评论(0编辑  收藏  举报