传送门:点击打开链接
题意:两种操作,操作1查询区间第k大,操作2把位置x的值改成y。n,Q<=1e5
思路:整体二分。刚开始以为是在线段树上二分答案,没想到它竟然是对所有的二分答案,还是第一次见到这样的二分方法!
说下整体二分的大概思路:
首先,按照操作顺序,将所有的查询和修改操作全部加入到数组A中,然后去调用solve函数,L和R其实是数组A的指针,l和r是二分答案的范围
之后,取l和r的中点m,然后顺序遍历数组A中所有的操作,该修改的在树状数组上修改,该查询的在树状数组上查询。
之后,把数组A给划分开,划分成前l1部分的操作位置的数都<=m,后l2部分的操作位置的数都>m,划分完后,分开递归,并缩小答案范围。
最后总复杂度是,整体二分的复杂度是O(nlogn),树状数组的复杂度是O(logn),合起来一共是O(nlogn^2)
还有一个技巧,就是树状数组上直接打标记,来快速清空数组
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <stack>
#include <queue>
#include <cstdio>
#i