题目:

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. go get超时解决办法

    go get gopkg.in/yaml.v2超时,发现被墙了,解决办法如下: 1.安装golang.org/x/net $ mkdir -p $GOPATH/src/golang.org/x/ $ ...

  2. MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!

    最近在工作中遇到一个问题: 我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题. 下单的存储过程中有这样两句代码: ; ; ; 执行存储 ...

  3. LVS基于DR模式搭建负载均衡群集

    LVS -DR模式集群架构原理图

  4. linux socketpair

    相对于无名管道来说,socketpair也是使用在亲缘进程之间,不过它提供了能够全双工通信的通道 man socketpair: #include <sys/types.h> /* See ...

  5. Too many parameters: expected 1, was given 2 Query: SELECT count(id) FROM `user` WHERE username = ?; Parameters: [org.apache.commons.dbutils.handlers.ScalarHandler@453da22c, [李明]]

    public Object getValue(String sql,Object... args) { Connection conn = null; Object obj= null; try { ...

  6. python Re库的介绍

    re库的贪婪匹配和最小匹配 后面跟着?变为最小匹配

  7. PHP.23-ThinkPHP框架的三种模型实例化-(D()方法与M()方法的区别)

    三种模型实例化 原则上:每个数据表应对应一个模型类(Home/Model/GoodsModel.class.php --> 表tp_goods) 1.直接实例化 和实例化其他类库一样实例化模型类 ...

  8. android获取未安装APK签名信息及MD5指纹

    站在巨人的肩膀上写博客: http://blog.csdn.net/wulianghuan/article/details/18400581 http://www.jb51.net/article/7 ...

  9. JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32

    Java使用API访问Hbase报错: 我的hbase主节点是spark1   java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名     修改主机hosts文 ...

  10. Eclipse 透视图(Perspective)---Eclipse教程第06课

    什么是透视图? 透视图是一个包含一系列视图和内容编辑器的可视容器.默认的透视图叫 java. Eclipse 窗口可以打开多个透视图,但在同一时间只能有一个透视图处于激活状态. 用户可以在两个透视图之 ...