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... ------------------------------------- ...
随机推荐
- vue登录插件引来的后续问题
上次介绍了下写的登录弹框插件,过了几天发现点击去注册或者改密码的跳转失效.报错this.$router.push is not a function,继续打印this.$router也是undefin ...
- [vijos p1028] 魔族密码
描述 风之子刚走进他的考场,就……花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花)风之子:我呕……(杀死人的眼神)快说题目!否则……-_-###花花:……咦~~好冷~~我们现在要 ...
- Struts2基础入门
Struts2基础入门 创建一个web工程 0)导包并且创建一个核心配置文件 <?xml version="1.0" encoding="UTF-8"?& ...
- ssm整合-错误3
1.警告: Unknown version string [3.1]. Default version will be used. 因为Tomcat版本为7,支持3.1版本的为Tomcat 8: 2. ...
- Guava Cache 工具类 [ GuavaCacheUtil ]
pom.xml <dependency> <groupId>com.google.guava</groupId> <artifactId>guava&l ...
- Black Box POJ1442
Description Our Black Box represents a primitive database. It can save an integer array and has a sp ...
- ESP-01S-ESP8266入门教程
1.模块实物 2.引脚说明 3.连接说明,按下图将引脚连接到PC的串口(VCC接3V,GND接地,TX接串口TX,RX接串口的RX,CH_PD接3V,否则wifi不工作) 4.通过该PC串口配置WiF ...
- java程序——输入判断成绩
import java.util.*; class ExceptionOut extends Exception{ } public class Score { public static void ...
- svn git 导入本地文件到远程服务器 import
以前,想要把本地的一个文件上传到svn 或者git 服务器的时候,都要先把服务器上的文件夹down 下来,然后把要添加的文件添加进去,然后提交. 想想都麻烦. 现在我们用import 命令就可以做到, ...
- easyui-datagrid单选模式下隐藏表头的全选框
easyui-datagrid可以不使用复选框来进行单选,直接使用onSelect和 singleSelect:true就可以实现单选,但是有一些用户会比较习惯使用勾选框,这时会加一列checkbox ...