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 ...
随机推荐
- redis加入到Windows 服务
1.cmd命令 安装命令: redis-server.exe --service-install redis.windows.conf --loglevel verbose 卸载命令: redi ...
- JVM学习03_new对象的内存图讲解,以及引出static方法(转)
目录 -=-讲解对象创建过程中,-=-堆内存和栈内存的情况 -=-构造函数对类对象的成员变量的初始化过程 -=-构造函数出栈 -=-类的方法在不访问类对象的成员变量时造成的内存资源浪费怎么解决? -= ...
- windows phone (23) ScrollViewer元素
原文:windows phone (23) ScrollViewer元素 ScrollViewer类表示可包含其他可见元素的可滚动区域,一般会用在屏幕的宽度和高度不够用时,作为一种延伸使用,参考书上称 ...
- Android如何获得手机power_profile.xml文件
上的能量消耗进行最近的测试,阅读文章一个月,最后,我们发现了一些新的想法,但产生的问题.那 工作无法再进行下去. 在Android手机中,对于手机中的每一个部件(cpu.led.gps.3g等等)执行 ...
- Yii 控制dropdownlist / select 控件的宽度和 option 的宽度
默认情况下, option的宽度会由options中最宽的元素决定,并且同时决定着select控件的宽度 在Yii中,如果需要自定义select控件的宽度,可以用 htmlOptions定义,如下: ...
- SQL Server :理解GAM和SGAM页
原文:SQL Server :理解GAM和SGAM页 我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时 ...
- 解决TabActivity中子页面不通过导航跳转到还有一个页面的问题
问题:当你的导航在TabActivity中 而子页面的一个button须要切换到当中的某一个导航页面 转载请注明出处:http://blog.csdn.net/x605940745 demo下载地址: ...
- Web Socket rfc6455 握 (C++)
std::string data((const char*)buf->data(),bytes_transferred); recycle_buffer(buf); std::string ke ...
- SQL Tuning Advisor一个错误ORA-00600: internal error code, arguments: [kesqsMakeBindValue:obj]
跑SELECT dbms_sqltune.report_tuning_task(:tuning_task) FROM dual; 错误消息,如下面: ORA-00600: internal erro ...
- 【转】Qt事件循环与线程 二
转自:http://blog.csdn.net/changsheng230/article/details/6153449 续上文:http://blog.csdn.net/changsheng230 ...