BZOJ 2588 主席树
思路:
主席树
做完BZOJ 3123 觉得这是道水啊……
然后狂RE 狂MLE
要来数据
忘把deep[1]设成1了………………………….
啊wocccccccccccccccc
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 200050
#define M 5000000
typedef long long ll;
int n,m,xx,yy,zz,a[N],inf,cnt,fa[N/2][21],tree[M],lson[M],rson[M];
int first[N],next[N],v[N],root[N],tot,ans,jy,deep[N];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void insert(int x,int &y,int l,int r,int wei){
if(!y)y=++cnt;tree[y]=tree[x]+1;if(l==r)return;
int mid=((ll)l+r)/2;
if(mid<wei)lson[y]=lson[x],insert(rson[x],rson[y],mid+1,r,wei);
else rson[y]=rson[x],insert(lson[x],lson[y],l,mid,wei);
}
void dfs(int x){
for(int i=1;i<=20;i++)fa[x][i]=fa[fa[x][i-1]][i-1];
insert(root[fa[x][0]],root[x],1,inf,a[x]);
for(int i=first[x];~i;i=next[i])if(v[i]!=fa[x][0]){
deep[v[i]]=deep[x]+1;
fa[v[i]][0]=x,dfs(v[i]);
}
}
int lca(int x,int y){
if(deep[x]<deep[y])swap(x,y);
for(int i=20;~i;i--)if(deep[fa[x][i]]>=deep[y])x=fa[x][i];
if(x==y)return x;
for(int i=20;~i;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
return fa[x][0];
}
int query(int x,int y,int lca,int flca,int l,int r,int wei){
if(l==r)return l;
int mid=((ll)l+r)/2,temp=tree[lson[x]]+tree[lson[y]]-tree[lson[lca]]-tree[lson[flca]];
if(temp<wei)return query(rson[x],rson[y],rson[lca],rson[flca],mid+1,r,wei-temp);
else return query(lson[x],lson[y],lson[lca],lson[flca],l,mid,wei);
}
signed main(){
memset(first,-1,sizeof(first)),scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),inf=max(inf,a[i]);
for(int i=1;i<n;i++)scanf("%d%d",&xx,&yy),add(xx,yy),add(yy,xx);
deep[1]=1,dfs(1);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&xx,&yy,&zz),xx^=ans;jy=lca(xx,yy);
printf("%d",ans=query(root[xx],root[yy],root[jy],root[fa[jy][0]],1,inf,zz));
if(i!=m)putchar('\n');
}
}
BZOJ 2588 主席树的更多相关文章
- bzoj 1901 主席树+树状数组
修改+查询第k小值 单纯主席树修改会打乱所有,所以再套一个树状数组维护前缀和使得修改,查询都是log 对了,bzoj上不需要读入组数,蜜汁re.. #include<cstdio> #in ...
- bzoj 1818 主席树
思路:主席树搞一搞. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #de ...
- BZOJ 4771 主席树+倍增+set
思路: 因为有深度的限制,并且我们是在线段树上维护权值,所以我们把点按照dep排序,然后一个一个修改...主席树的下标就是dfs序,子树的查询就是区间查询... 但是发现这样怎么去维护LCA呢...因 ...
- BZOJ 3674/BZOJ 3673 主席树
思路: 主席树维护可持久化数组 剩下的就是普通的并查集了- //By SiriusRen #include <cstdio> #include <cstring> #inclu ...
- BZOJ 3123 主席树 启发式合并
思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...
- BZOJ 4448 主席树+树链剖分(在线)
为什么题解都是离线的-- (抄都没法抄) 搞一棵主席树 1 操作 新树上的当前节点设成1 2 操作 查max(i-xx-1,0)那棵树上这条路径上有多少个点是1 让你找经过了多少个点 查的时候用dee ...
- BZOJ 3524主席树裸题 (雾)
思路: 按权值建一棵主席树 (但是这好像不是正解 空间复杂度是不对的--.) //By SiriusRen #include <cstdio> #include <cstring&g ...
- BZOJ 3524 - 主席树
传送门 题目分析 标准主席树,按照位置插入每个数,对于询问l, r, 在l-1,r两树上按照线段树搜索次数大于(r - l + 1) / 2的数. code #include<bits/stdc ...
- BZOJ 3932 - 主席树
传送门 题目分析 在只打会主席树模板的情况下做了这道题,也算是深有体会. 首先任务可以差分:一个任务是(s, e, p), 则在s处+1, 在e+1处-1,符合前缀.但是我们要查询指定时间的前k任务之 ...
随机推荐
- Linux平台Oracle多个实例启动说明
环境说明:oracle实例1的SID为orcl(为默认启动的实例),第二个实例的SID为orcl2 启动步骤: 1)启动数据库实例完成后,启动数据库监听服务 #lsnrctl start 2)切 ...
- 杂项-DB:数据库
ylbtech-杂项-DB:数据库 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”是以一定方式储存在一起.能与 ...
- struts2-action中使用通配符
转自:https://www.cnblogs.com/ningvsban/p/3734574.html 在以前的学习中,<action>元素的配置,都是用明确的配置,其name.class ...
- 比较不错的spring学习博客
http://blog.csdn.net/tangl_99/article/details/1176141
- Ubuntu14.04下Mongodb的Java API编程实例(手动项目或者maven项目)
不多说,直接上干货! 若大家,不会安装的话,则请移步,随便挑选一种. Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04 ...
- 前端开发人员要注意的css规范,css命名。
刚工作的时候也没注意关于css的规则,根据自己的心情想怎么用就怎么用,完成工作就好不会考虑代码的可读性,加载的性能,现在身为前端的一员就要有程序员的自我修养(嘿嘿,是不是很有责任感啊). 废话不多说, ...
- js面向对象概念解析
ECMAScript有两种开发模式: 1.函数式(过程化) 2.面向对象(OOP). 面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScri ...
- Temporary Tables临时表
1简介 ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据, 或者保存在一个事务中需要的数据.当会话退出或者用户提 ...
- ZBrush中绘制层是什么意思?
我们经常使用笔刷雕刻模型,在使用笔刷为头部模型添加一些纹理效果时,有时可能会有不满意的地方,但是很难修改,也很难把它还原为原来的状态,这时我们就可以使用Layers(绘制层)来将雕刻的部分分到每一个层 ...
- Jmeter数据库测试
Jmeter安装 Jmeter是纯java程序,所以在安装jmeter之前需要先安装JDK,并配置JDK路径,然后开始安装Jmeter. 进入Jmeter官网(https://jmeter.apach ...