n<=10000个数有m<=10000个操作,1、询问一个区间的第k小的数;2、单点修改。

带修主席树。

整体二分。

整体二分的必要条件:

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
using namespace std; int n,m;
#define maxn 30011
const int inf=0x3f3f3f3f;
struct Ope
{
int x,y,z,id,type;
//type=1: 询问区间[x,y]第z大,询问编号id
//type=0:把位置x的数修改为y,增加:z=1,删除:z=-1
}q[maxn],al[maxn],ar[maxn];int len;
int ans[maxn]; struct BIT
{
int a[maxn];
void add(int x,int v) {for (;x<=n;x+=x&-x) a[x]+=v;}
int query(int x) {int ans=; for (;x;x-=x&-x) ans+=a[x]; return ans;}
}t; void solve(int L,int R,int ql,int qr)
{
if (L>R || ql>qr) return;
if (L==R)
{
for (int i=ql;i<=qr;i++) if (q[i].type) ans[q[i].id]=L;
return;
}
int mid=(L+R)>>,lql=,lqr=;
for (int i=ql;i<=qr;i++)
{
if (q[i].type)
{
int tmp=t.query(q[i].y)-t.query(q[i].x-);
if (tmp>=q[i].z) al[++lql]=q[i];
else
{
q[i].z-=tmp;
ar[++lqr]=q[i];
}
}
else
{
if (q[i].y<=mid)
{
t.add(q[i].x,q[i].z);
al[++lql]=q[i];
}
else ar[++lqr]=q[i];
}
}
for (int i=;i<=lql;i++) if (al[i].type==) t.add(al[i].x,-al[i].z);
for (int i=,j=ql;i<=lql;i++,j++) q[j]=al[i];
for (int i=,j=ql+lql;i<=lqr;i++,j++) q[j]=ar[i];
solve(L,mid,ql,ql+lql-);
solve(mid+,R,ql+lql,qr);
} int a[maxn];
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&q[i].y),a[i]=q[i].y,q[i].x=i,q[i].z=,q[i].type=;
char s[];
int cntq=;
for (int i=,j=n+;i<=m;i++,j++)
{
scanf("%s",s);
if (s[]=='Q') scanf("%d%d%d",&q[j].x,&q[j].y,&q[j].z),q[j].id=++cntq,q[j].type=;
else scanf("%d%d",&q[j].x,&q[j].y),q[j].z=,q[j].type=,
q[j+]=(Ope){q[j].x,a[q[j].x],-,,},a[q[j].x]=q[j].y,j++;
if (i==m) len=j;
}
solve(,inf,,len);
for (int i=;i<=cntq;i++) printf("%d\n",ans[i]);
return ;
}

最新文章

  1. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
  2. dom4j使用总结
  3. Java和C#下的参数验证
  4. 【UE4游戏开发】安装UE4时报SU-PQR1603错误的解决方法
  5. 【Android端APP 安装包检查】安装包检查具体内容及实现方法
  6. CSS3实现32种基本图形
  7. [linux] Upgrading glibc for the GHOST Vulnerability
  8. [ZZ] GTX 280 GPU architecture
  9. 夺命雷公狗---DEDECMS----27dedecms电影的下载地址的完成
  10. 【转】java_web开发入门
  11. IDTHook 深入学习
  12. 【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)
  13. @Entity设置实体lazy = false
  14. 高效算法——E - 贪心-- 区间覆盖
  15. file_get_content、fsockopen和curl之间的优缺点
  16. 图解函数重载以及arguments
  17. SmartSql For Asp.Net Core 最佳实践
  18. EBS WEBADI导入日记账 客户化账户组合规则校验
  19. ActiveMQ笔记:管理和监控
  20. DPDK helloworld 源码阅读

热门文章

  1. mysql之通过cmd连接远程数据库
  2. .vue文件在phpstorm中红线解决办法
  3. vue--组件中的自定义事件
  4. Cannot load php5apache2_4.dll into server 问题的解决方法
  5. TCP/UDP套接字 java socket编程实例
  6. 掌握Spark机器学习库-07.14-保序回归算法实现房价预测
  7. 当前主要的常用的PHP环境部署套件比较
  8. Python_高阶函数、装饰器(decorator)
  9. scrapy 请求传参
  10. idea 常用操作