当前位置: 代码迷 >> 综合 >> 整体二分 hdu5412 CRB and Queries
  详细解决方案

整体二分 hdu5412 CRB and Queries

热度:96   发布时间:2023-12-14 03:16:43.0

传送门:点击打开链接

题意:两种操作,操作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
  相关解决方案