题目:

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 | 带修改主席树的更多相关文章

  1. BZOJ 1901: Zju2112 Dynamic Rankings[带修改的主席树]【学习笔记】

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

  2. bzoj 1901: Zju2112 Dynamic Rankings【整体二分+树状数组||主席树+树状数组】

    整体二分: 对于每一个修改操作,标记为1,并且加一个标记为-1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和-1的操作都在树状数组对应位 ...

  3. BZOJ 1901: Zju2112 Dynamic Rankings( 树状数组套主席树 )

    裸的带修改主席树.. 之前用BIT套Splay( http://www.cnblogs.com/JSZX11556/p/4625552.html )A过..但是还是线段树好写...而且快(常数比平衡树 ...

  4. Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化

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

  5. bzoj 1901: Zju2112 Dynamic Rankings -- 主席树,树状数组,哈希

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB Description 给定一个含有n个数的序列a[1] ...

  6. Bzoj 1901: Zju2112 Dynamic Rankings 树套树,线段树,平衡树,Treap

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

  7. bzoj 1901: Zju2112 Dynamic Rankings(树套树)

    1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...

  8. BZOJ 1901 Zju2112 Dynamic Rankings

    树阵主席设置树.维护间隔动态K大. .. ZOJ到空间太小,太大,仅仅能到BZOJ上交 1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memor ...

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

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

随机推荐

  1. 关于var和ES6中的let,const的理解

    var的作用就不多说了,下面说说var的缺点: 1.var可以重复声明 var a = 1; var a = 5; console.log(a); //5 不会报错 在像这些这些严谨的语言来说,一般是 ...

  2. datatable行内内容太长,有时不自动换行解决方法

    加一个css属性即可 style = "word-wrap:break-word;" js代码: "render": function (data, type, ...

  3. html颜色实体符号表示汇总

    颜色的表示方法有许多种,列如black,#000000,rgb(0,0,0)都表示黑色.这三种表示方法分别为英文,十六进制,rgb格式.拥有下列颜色,足以使你的网页充满生机. 颜色名 十六进制颜色值 ...

  4. python如果想输出原格式的内容,可以加''' ''',占位符使用方式

    print('我考了%d分'%20) msg=''' ---------info of %s----------- name: %s age: %d #字符串不能放到%d处 job: %s salar ...

  5. 使用perl发邮件

    如果你使用的是 window 系统,没有 sendmail 工具.这时你就可以使用 perl 的 MIME:Lite 模块作为邮件客户端来发送邮件. 这里我们直接用 cpan 来安装(需要 root ...

  6. spark提交运算原理

    前面几天元旦过high了,博客也停了一两天,哈哈,今天我们重新开始,今天我们介绍的是spark的原理 首先先说一个小贴士: spark中,对于var count = 0,如果想使count自增,我们不 ...

  7. zookeeper: web ui工具的安装

    zookeeper官方没有提供web用户界面,这使很多人在使用zookeeper(动物管理员)同时,并不是很容易的理解zookeeper的数据结构,还好淘宝有位大神用Nodejs写了一个web的ui工 ...

  8. 20145202马超 《Java程序设计》第八周学习总结

    第十四章 NIO与NIO2 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得channel的 ...

  9. ClassNotFountException 与 NoClassDefineError

    一 知识准备 NoClassDefFoundError:正如它们的名字所说明的是一个错误 (Error),而ClassNotFoundException是一个异常.正如上一章节所说Exception和 ...

  10. luoguP1726 上白泽慧音

    P1726 上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村 ...