题目:

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. BZOJ1202: [HNOI2005]狡猾的商人(带权并查集)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4577  Solved: 2249[Submit][Status][Discuss] Descript ...

  2. hasOwnProperty自我理解

    暂时不考虑ES6中symbol,hasOwnProperty()方法返回的是一个对象上是否包含一个指定属性,如果含有则返回true,如果没有则返回false.   和 in 运算符不同,该方法会忽略掉 ...

  3. Spring入门注解版

    参照博文Spring入门一,以理解注解的含义. 项目结构: 实现类:SpringHelloWorld package com.yibai.spring.helloworld.impl; import ...

  4. is和==,encode和decode

    0.编码解码 >encode和decode a = "你好" s = a.encode("GBK") print(s) # b'\xc4\xe3\xba\ ...

  5. table选项卡

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. 虚拟机桥接模式下多台Ubuntu16.04系统互相连接

    1.首先新建一个虚拟机并在该虚拟机上安装Ubuntu16.04系统.为这台虚拟机起名为Ubuntu3. 2.对Ubuntu3进行克隆,为新克隆生成的虚拟机起名为Ubuntu2.(这时我们会发现Ubun ...

  7. Numpy安装报错:试过N种安装方法终于

    Import numpy时,会报下面的错误 /home/spyros/.local/lib/python2.7/site-packages/numpy/core/multiarray.so: unde ...

  8. HDU 2222 AC自动机(模版题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  9. 笔记-git-基础使用

    笔记-git-基础使用 1.      git相关概念 工作区(Working Directory): 就是在电脑里能看到的目录,init后的当前目录就是一个工作区: 版本库(Repository): ...

  10. IAR FOR STM8S 错误 An error occurred while retrieving GDI features: gdi-error [40201]解决方法

    今早使用IAR调试编译调试一个工程,发现IAR竟然出现如下错误信息 An error occurred ]: Can't access configuration database 在网上查看了一下, ...