BZOJ 1901: Zju2112 Dynamic Rankings | 带修改主席树
题目:
emmmm是个权限题
题解:
带修改主席树的板子题,核心思想是用树状数组维护动态前缀和的性质来支持修改
修改的时候修改类似树状数组一样进行logn个Insert
查询的时候同理,树状数组的方法取出和这个位置相关的节点,用数组保存然后计算
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100005
#define M 6000005
using namespace std;
int n,m,a[N],lst[N],idx;
int tot,root[N],data[M],ls[M],rs[M],cur1[N],cur2[N];
int qtype[N],q1[N],q2[N],q3[N];
char s[];
void build(int &k,int l,int r)
{
k=++tot;
if (l==r) return;
int mid=l+r>>;
build(ls[k],l,mid),build(rs[k],mid+,r);
}
void change(int x,int &y,int l,int r,int p,int k)
{
data[y=++tot]=data[x]+k,ls[y]=ls[x],rs[y]=rs[x];
if (l==r) return;
int mid=l+r>>;
if (p<=mid) change(ls[x],ls[y],l,mid,p,k);
else change(rs[x],rs[y],mid+,r,p,k);
} void add(int p,int num,int x)
{
for (;p<=n;p+=p&-p) change(root[p],root[p],,idx,num,x);
}
int query(int ql,int qr,int k)
{
int l=,r=idx;
for (int p=ql;p;p-=p&-p) cur1[p]=root[p];
for (int p=qr;p;p-=p&-p) cur2[p]=root[p];
while (l<r)
{
int mid=l+r>>,sum1=,sum2=;
for (int p=ql;p;p-=p&-p) sum1+=data[ls[cur1[p]]];
for (int p=qr;p;p-=p&-p) sum2+=data[ls[cur2[p]]];
if (sum2-sum1>=k)
{
for (int p=ql;p;p-=p&-p) cur1[p]=ls[cur1[p]];
for (int p=qr;p;p-=p&-p) cur2[p]=ls[cur2[p]];
r=mid;
}
else
{
l=mid+,k-=sum2-sum1;
for (int p=ql;p;p-=p&-p) cur1[p]=rs[cur1[p]];
for (int p=qr;p;p-=p&-p) cur2[p]=rs[cur2[p]];
}
}
return lst[l];
}
int getpos(int x)
{
return lower_bound(lst+,lst+idx+,x)-lst;
}
bool isQ()
{
char c;
while(c=getchar(),c!='Q' && c!='C');
return c=='Q';
}
int main()
{
scanf("%d%d",&n,&m),idx=n;
for (int i=;i<=n;i++)
scanf("%d",&a[i]),lst[i]=a[i];
for (int i=;i<=m;i++)
{
qtype[i]=isQ();
scanf("%d%d",q1+i,q2+i);
if (qtype[i]) scanf("%d",q3+i);
else lst[++idx]=q2[i];
}
sort(lst+,lst++idx);
idx=unique(lst+,lst++idx)-lst-;
build(root[],,idx);
for (int i=;i<=n;i++) root[i]=root[];
for (int i=;i<=n;i++) add(i,getpos(a[i]),);
for (int i=;i<=m;i++)
if (qtype[i]) printf("%d\n",query(q1[i]-,q2[i],q3[i]));
else
{
add(q1[i],getpos(a[q1[i]]),-);
a[q1[i]]=q2[i];
add(q1[i],getpos(a[q1[i]]),);
}
return ;
}
BZOJ 1901: Zju2112 Dynamic Rankings | 带修改主席树的更多相关文章
- BZOJ 1901: Zju2112 Dynamic Rankings[带修改的主席树]【学习笔记】
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7143 Solved: 2968[Su ...
- bzoj 1901: Zju2112 Dynamic Rankings【整体二分+树状数组||主席树+树状数组】
整体二分: 对于每一个修改操作,标记为1,并且加一个标记为-1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和-1的操作都在树状数组对应位 ...
- BZOJ 1901: Zju2112 Dynamic Rankings( 树状数组套主席树 )
裸的带修改主席树.. 之前用BIT套Splay( http://www.cnblogs.com/JSZX11556/p/4625552.html )A过..但是还是线段树好写...而且快(常数比平衡树 ...
- Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6321 Solved: 2628[Su ...
- bzoj 1901: Zju2112 Dynamic Rankings -- 主席树,树状数组,哈希
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Description 给定一个含有n个数的序列a[1] ...
- Bzoj 1901: Zju2112 Dynamic Rankings 树套树,线段树,平衡树,Treap
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6471 Solved: 2697[Su ...
- bzoj 1901: Zju2112 Dynamic Rankings(树套树)
1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...
- BZOJ 1901 Zju2112 Dynamic Rankings
树阵主席设置树.维护间隔动态K大. .. ZOJ到空间太小,太大,仅仅能到BZOJ上交 1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memor ...
- BZOJ 1901: Zju2112 Dynamic Rankings( BIT 套 BST )
BIT 套 splay 其实也是不难...每个 BIT 的结点保存一颗 splay , 询问就二分答案然后判断rank... ------------------------------------- ...
随机推荐
- 关于var和ES6中的let,const的理解
var的作用就不多说了,下面说说var的缺点: 1.var可以重复声明 var a = 1; var a = 5; console.log(a); //5 不会报错 在像这些这些严谨的语言来说,一般是 ...
- datatable行内内容太长,有时不自动换行解决方法
加一个css属性即可 style = "word-wrap:break-word;" js代码: "render": function (data, type, ...
- html颜色实体符号表示汇总
颜色的表示方法有许多种,列如black,#000000,rgb(0,0,0)都表示黑色.这三种表示方法分别为英文,十六进制,rgb格式.拥有下列颜色,足以使你的网页充满生机. 颜色名 十六进制颜色值 ...
- python如果想输出原格式的内容,可以加''' ''',占位符使用方式
print('我考了%d分'%20) msg=''' ---------info of %s----------- name: %s age: %d #字符串不能放到%d处 job: %s salar ...
- 使用perl发邮件
如果你使用的是 window 系统,没有 sendmail 工具.这时你就可以使用 perl 的 MIME:Lite 模块作为邮件客户端来发送邮件. 这里我们直接用 cpan 来安装(需要 root ...
- spark提交运算原理
前面几天元旦过high了,博客也停了一两天,哈哈,今天我们重新开始,今天我们介绍的是spark的原理 首先先说一个小贴士: spark中,对于var count = 0,如果想使count自增,我们不 ...
- zookeeper: web ui工具的安装
zookeeper官方没有提供web用户界面,这使很多人在使用zookeeper(动物管理员)同时,并不是很容易的理解zookeeper的数据结构,还好淘宝有位大神用Nodejs写了一个web的ui工 ...
- 20145202马超 《Java程序设计》第八周学习总结
第十四章 NIO与NIO2 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得channel的 ...
- ClassNotFountException 与 NoClassDefineError
一 知识准备 NoClassDefFoundError:正如它们的名字所说明的是一个错误 (Error),而ClassNotFoundException是一个异常.正如上一章节所说Exception和 ...
- luoguP1726 上白泽慧音
P1726 上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村 ...