带修改的题主席树不记录前缀,只记录单点,用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 ;
}

bzoj1901: Zju2112 Dynamic Rankings(BIT套主席树)的更多相关文章

  1. 【BZOJ-1901】Dynamic Rankings 带修主席树

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7292  Solved: 3038[Su ...

  2. BZOJ 1901: Zju2112 Dynamic Rankings | 带修改主席树

    题目: emmmm是个权限题 题解: 带修改主席树的板子题,核心思想是用树状数组维护动态前缀和的性质来支持修改 修改的时候修改类似树状数组一样进行logn个Insert 查询的时候同理,树状数组的方法 ...

  3. [BZOJ1901]Zju2112 Dynamic Rankings

    [BZOJ1901]Zju2112 Dynamic Rankings 试题描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i ...

  4. 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

    谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...

  5. BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Su ...

  6. BZOJ 1901: Zju2112 Dynamic Rankings( BIT 套 BST )

    BIT 套 splay 其实也是不难...每个 BIT 的结点保存一颗 splay , 询问就二分答案然后判断rank... ------------------------------------- ...

  7. [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】

    题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...

  8. BZOJ1901 Zju2112 Dynamic Rankings 【树状数组套主席树】

    题目 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[j]中第k小的数是多少(1≤k≤j- ...

  9. BZOJ1901 Zju2112 Dynamic Rankings 主席树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1901 题意概括 给你一段序列(n个数),让你支持一些操作(共m次), 有两种操作,一种是询问区间第 ...

随机推荐

  1. flask源码走读

    Flask-Origin 源码版本 一直想好好理一下flask的实现,这个项目有Flask 0.1版本源码并加了注解,挺清晰明了的,我在其基础上完成了对Werkzeug的理解部分,大家如果想深入学习的 ...

  2. AngularJS 初探

    AngularJS,诞生于2009年,由Misko Hevery等人创建,后为Google所收购.这是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为 ...

  3. priority_queue(优先队列):排序不去重

    C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序. 头文件:#include<queue> 参数:priority_queue<Type, Container ...

  4. LeetCode 108——将有序数组转化为二叉搜索树

    1. 题目 2. 解答 一棵高度平衡的二叉搜索树意味着根节点的左右子树包含相同数量的节点,也就是根节点为有序数组的中值. 因此,我们将数组的中值作为根节点,然后再递归分别得到左半部分数据转化的左子树和 ...

  5. aishell数据处理为thchs30格式

    目录 aishell数据转换格式 aishell数据转化方法 aishell数据格式对于用神经网络处理数据的同学来说比较不友善,因为他只有文字转录和音素级别的转录,并没有拼音的转录. 而thchs30 ...

  6. leetcode个人题解——#5 Container with most water

    class Solution { public: string longestPalindrome(string s) { int length = s.length(); ) return s; ; ...

  7. qt qchart缩放后坐标轴间隔取整

    使用qt的qchart显示数据曲线,坐标轴QValueAxis可以设置刻度间隔数量,但每个刻度的数值是根据坐标的极值除以间隔数量得到的,不一定是整数,导致曲线控件的显示刻度不适合观察. 如图: 纵坐标 ...

  8. Java学习个人备忘录之多线程

    进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...

  9. c++SDK c#调用_疑难杂症

    在编写过程中,会不时遇到各种问题: 1.dll明显在和exe同一目录下但调用不成功, 2.运行正常,没有报错,参数数值运行过程中也一致,但结果就是达不到预想, 都是dll没有引用完全造成的影响. 推荐 ...

  10. 软工网络15个人作业4-alpha阶段个人总结(201521123059 叶文柠)

    一.个人总结 (1) 类别 具体技能和面试问题 现在回答 毕业找工作时 语言 最拿手的计算机语言之一,代码量多少? 感觉自己没有最拿手的语言,而且拿手的在计算机网络这方面的,所以在软件变成这方面的代码 ...