带修改的题主席树不记录前缀,只记录单点,用BIT统计前缀。

    对于BIT上每一个点建一棵主席树,修改和询问的时候用BIT跑,在主席树上做就行了。

    3k4人AC的题#256...应该不算慢

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=,inf=1e9;
struct poi{int size,lt,rt;}tree[maxn*];
int n,m,tot,sz,cnt1,cnt2,N;
int t1[maxn],t2[maxn],a[maxn],b[maxn],x[maxn],y[maxn],z[maxn],root[maxn];
bool q[maxn];
char s[];
void read(int &k)
{
int f=;k=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
int lowbit(int x){return x&-x;}
void update(int &x,int l,int r,int cx,int delta)
{
tree[++sz]=tree[x];tree[sz].size+=delta;x=sz;
if(l==r)return;
int mid=(l+r)>>;
if(cx<=mid)update(tree[x].lt,l,mid,cx,delta);
else update(tree[x].rt,mid+,r,cx,delta);
}
int query(int l,int r,int k)
{
if(l==r)return l;
int mid=(l+r)>>,sum1=,sum2=;
for(int i=;i<=cnt1;i++)sum1+=tree[tree[t1[i]].lt].size;
for(int i=;i<=cnt2;i++)sum2+=tree[tree[t2[i]].lt].size;
if(sum2-sum1>=k)
{
for(int i=;i<=cnt1;i++)t1[i]=tree[t1[i]].lt;
for(int i=;i<=cnt2;i++)t2[i]=tree[t2[i]].lt;
return query(l,mid,k);
}
for(int i=;i<=cnt1;i++)t1[i]=tree[t1[i]].rt;
for(int i=;i<=cnt2;i++)t2[i]=tree[t2[i]].rt;
return query(mid+,r,k-(sum2-sum1));
}
int main()
{
read(n);read(m);
for(int i=;i<=n;i++)read(a[i]),b[++N]=a[i];
for(int i=;i<=m;i++)
{
scanf("%s",s+);
read(x[i]);read(y[i]);
if(s[]=='Q')read(z[i]),q[i]=;
else b[++N]=y[i];
}
sort(b+,b++N);N=unique(b+,b++N)-b-;
for(int i=;i<=n;i++)a[i]=lower_bound(b+,b++N,a[i])-b;
for(int i=;i<=n;i++)
for(int j=i;j<=n;j+=lowbit(j))
update(root[j],,N,a[i],);
for(int i=;i<=m;i++)
if(q[i])
{
cnt1=cnt2=;
for(int j=x[i]-;j;j-=lowbit(j))
t1[++cnt1]=root[j];
for(int j=y[i];j;j-=lowbit(j))
t2[++cnt2]=root[j];
printf("%d\n",b[query(,N,z[i])]);
}
else
{
for(int j=x[i];j<=n;j+=lowbit(j))
update(root[j],,N,a[x[i]],-);
a[x[i]]=lower_bound(b+,b++N,y[i])-b;;
for(int j=x[i];j<=n;j+=lowbit(j))
update(root[j],,N,a[x[i]],);
}
return ;
}

最新文章

  1. 前端工程师的PS默认工作区
  2. xampp配置host和httpd可以随意访问任何本机的地址
  3. HTML之学习笔记(二)颜色体系
  4. 初识golang
  5. jq插件开发总结
  6. UIScreen的scale属性
  7. 基于Vue全家桶制作的的高仿美团APP
  8. 第34节:Java当中的异常
  9. 【BZOJ2402】陶陶的难题II 分数规划+树链剖分+线段树+凸包
  10. Learning-Python【33】:并发编程之多进程
  11. PAT 乙级 1089 狼人杀 &amp;&amp; 1090 危险品装箱 (我的时间最短哦)
  12. CDH版本的hadoop下载
  13. C#哈希表(HashTable)和Dictionary比较
  14. 自动化CodeReview - ASP.NET Core依赖注入
  15. 2017.7.11 fuse工作原理
  16. MySQL-查缺补漏
  17. request.getParameter();的意思
  18. storm的代码实现
  19. Django的路由层(1)
  20. React监听窗口变化事件

热门文章

  1. 【SpringCloud】 第九篇: 服务链路追踪(Spring Cloud Sleuth)
  2. Unity编辑器 - DragAndDrop拖拽控件
  3. 213. String Compression【LintCode java】
  4. 【shell 练习4】编写Shell用户管理脚本(二)
  5. 官方文档 恢复备份指南三 Recovery Manager Architecture
  6. 物联网常见通信协议RFID、NFC、Bluetooth、ZigBee等梳理
  7. Python中__name__属性的妙用
  8. 软件工程 作业part1
  9. 寒假作业end
  10. 福大软工1816:beta版本冲刺前准备