洛咕
题意:给定n个数的序列,维护两种操作,一是修改\(a[x]=y\),二是查询\([l,r]\)中第\(k\)小的数是多少.\(n,m<=100000\).
分析:在整体二分例题的基础上,增加了一个单点修改的操作.我们可以把一个单点修改操作\(a[x]=y\)分解为"将序列第x个数减去a[x]"和"将序列第x个数增加y"两个操作,同理原始序列的赋值也可以看做一个"将序列第x个数增加y"的操作,然后把这些操作和所有"询问"操作丢到一起进行整体二分,就还是模板了.
为了在分治的过程区分操作,我们将增加操作的\(opt\)标记为0,减去操作的\(opt\)标记为-1,其余的询问操作按照顺序(方便离线回答)标记为大于等于1的数.
#include
#include
#include
#include
#include
#include
#include