BZOJ 1901 Dynamic Rankings 树董事长
标题效果:间隔可以改变k少
我的两个天树牌主席。。。
隔断Count On A Tree 之后我一直认为,随着树的主席的变化是分域林木覆盖率可持久段树。
。。
事实上,我是误导。。。
尼可持久化线段树毛关系都木有啊!!
!
那就是动态的权值线段树啊啊啊啊啊啊啊!!!
好吧这里给不明确主席树的孩纸一些简单介绍:
1.外层树状数组
2.里层线段树
3.线段树动态开节点。仅此而已。和可持久化全然没关系。
4.一个点上的线段树和其它版本号毛关系都没有。
5.正常依照普通的树套树往里插即可了。
7.询问时把log个线段树放在一起跑(不要看我的代码,我的代码写的是log^3的)
8.节点数是nlog^2n
9.看题解要专心。没有第六点你看到了么。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 10100
using namespace std;
struct Tree{
Tree *ls,*rs;
int num;
}*tree[M],mempool[2002002],*C=mempool;
int n,m,a[M];
void Insert(Tree*&p,int x,int y,int val)
{
int mid=x+y>>1;
if(!p) p=C++;
p->num++;
if(x==y)
return ;
if(val<=mid)
Insert(p->ls,x,mid,val);
else
Insert(p->rs,mid+1,y,val);
}
void Delete(Tree*&p,int x,int y,int val)
{
int mid=x+y>>1;
p->num--;
if(x==y)
return ;
if(val<=mid)
Delete(p->ls,x,mid,val);
else
Delete(p->rs,mid+1,y,val);
}
int Get_Ans(Tree*p,int x,int y,int val)
{
int mid=x+y>>1;
if(!p)
return 0;
if(!p->num)
return 0;
if(x==y)
return p->num;
if(val<=mid)
return Get_Ans(p->ls,x,mid,val);
else
return (p->ls?p->ls->num:0) + Get_Ans(p->rs,mid+1,y,val);
}
void Update(int x,int y)
{
for(;x<=n;x+=x&-x)
Insert(tree[x],0,1000000000,y);
}
void Downdate(int x,int y)
{
for(;x<=n;x+=x&-x)
Delete(tree[x],0,1000000000,y);
}
int Get_Ans(int x,int y)
{
int re=0;
for(;x;x-=x&-x)
re+=Get_Ans(tree[x],0,1000000000,y);
return re;
}
int Bisection(int x,int y,int k)
{
int l=0,r=1000000000;
while(l+1<r)
{
int mid=l+r>>1;
if( Get_Ans(y,mid) - Get_Ans(x-1,mid) >= k )
r=mid;
else
l=mid;
}
if( Get_Ans(y,l) - Get_Ans(x-1,l) >= k )
return l;
return r;
}
int main()
{
int i,x,y,k;
char p[10];
cin>>n>>m;
for(i=1;i<=n;i++)
scanf("%d",&a[i]),Update(i,a[i]);
for(i=1;i<=m;i++)
{
scanf("%s",p);
if(p[0]=='Q')
scanf("%d%d%d",&x,&y,&k),printf("%d\n", Bisection(x,y,k) );
else
scanf("%d%d",&x,&y),Downdate(x,a[x]),a[x]=y,Update(x,a[x]);
}
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
BZOJ 1901 Dynamic Rankings 树董事长的更多相关文章
- BZOJ.1901.Dynamic Rankings(树状数组套主席树(动态主席树))
题目链接 BZOJ 洛谷 区间第k小,我们可以想到主席树.然而这是静态的,怎么支持修改? 静态的主席树是利用前缀和+差分来求解的,那么对于每个位置上的每棵树看做一个点,拿树状数组更新. 还是树状数组的 ...
- [BZOJ 1901] Dynamic Rankings 【树状数组套线段树 || 线段树套线段树】
题目链接:BZOJ - 1901 题目分析 树状数组套线段树或线段树套线段树都可以解决这道题. 第一层是区间,第二层是权值. 空间复杂度和时间复杂度均为 O(n log^2 n). 线段树比树状数组麻 ...
- bzoj 1901 Dynamic Rankings (树状数组套线段树)
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Description 给定一个含有n个数的序列a[1] ...
- [BZOJ 1901] Dynamic Rankings
Link: BZOJ 1901 传送门 Solution: 带修改主席树的模板题 对于静态区间第$k$大直接上主席树就行了 但加上修改后会发现修改时复杂度不满足要求了: 去掉/增加第$i$位上的值时要 ...
- BZOJ.1901.Dynamic Rankings(整体二分)
题目链接 BZOJ 洛谷 (以下是口胡) 对于多组的询问.修改,我们可以发现: 假设有对p1,p2,p3...的询问,在这之前有对p0的修改(比如+1),且p0<=p1,p2,p3...,那么我 ...
- BZOJ.1901.Dynamic Rankings(线段树套平衡树 Splay)
题目链接or Here 题意:n个数,有两个操作:1.修改某个数为v:2.询问一段区间第k小的数 如果没有修改,则可以用线段树,每个节点P[a,b]存储大小为b-a+1的数组,代表其中的数 同时,这个 ...
- BZOJ 1901 Dynamic Rankings (整体二分+树状数组)
题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$C ...
- bzoj 1901: Zju2112 Dynamic Rankings(树套树)
1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...
- Bzoj 1901: Zju2112 Dynamic Rankings 树套树,线段树,平衡树,Treap
1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6471 Solved: 2697[Su ...
随机推荐
- Verifying Checksum ... Bad Data CRC 错误解决
1.问题描述:使用SAM9X25 内核版本是2.6.39 在启动内核时会出现Verifying Checksum ... Bad Data CRC 错误 2.解决办法: 查看原先uboot参数: ...
- redis加入到Windows 服务
1.cmd命令 安装命令: redis-server.exe --service-install redis.windows.conf --loglevel verbose 卸载命令: redi ...
- hdu1698(线段树)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直接输出1结点的信息) ...
- ACM-简单题之Least Common Multiple——hdu1019
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 如何用C#使用java
如何使用C#调用Java 今天需要使用C#调用Java的包,研究了一下,大体是以下几种解决方案: 把Java包转换为DLL或者EXE后注册为com组件,之后调用. 使用web service 比如:H ...
- 屏蔽电信流氓广告造成的诡异的问题--Android WebView 长时间不能载入页面
发如今家里的时候用Android App里的WebView打开站点非常慢,会有十几秒甚至更长时间的卡住. 可是在电脑上打开相同的网页却非常快. 查找这个问题的过程比較曲折,记录下来. 抓取Androi ...
- 【filezilla】 ubuntu下安装filezilla
sudo apt-get install filezilla '安装filezilla3.6.02 filezilla '执行filezilla
- OCP读书笔记(18) - 空间管理
OLTP 表压缩 压缩始终是非常占用CPU的过程,并且需要花费一定时间,通常,如果压缩数据,则数据必须解压缩后才能使用.虽然此要求在数据仓库环境中是可以接受的但在OLTP环境中可能无法接受 现在,在O ...
- java反射中Method类invoke方法的使用方法
package com.zsw.test; import java.lang.reflect.Method;import java.lang.reflect.InvocationTargetExcep ...
- swift学习一:介绍,开发文档下载
在今天wwdc2014公布会上.苹果今天公布了全新的编程语言Swift以及新版Xcode.对于开发人员来说,Swift包括了非常多开发人员喜欢的功能,能够与Objective-C和C语言共同工作.Sw ...