思路:

主席树

做完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 主席树的更多相关文章

  1. bzoj 1901 主席树+树状数组

    修改+查询第k小值 单纯主席树修改会打乱所有,所以再套一个树状数组维护前缀和使得修改,查询都是log 对了,bzoj上不需要读入组数,蜜汁re.. #include<cstdio> #in ...

  2. bzoj 1818 主席树

    思路:主席树搞一搞. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #de ...

  3. BZOJ 4771 主席树+倍增+set

    思路: 因为有深度的限制,并且我们是在线段树上维护权值,所以我们把点按照dep排序,然后一个一个修改...主席树的下标就是dfs序,子树的查询就是区间查询... 但是发现这样怎么去维护LCA呢...因 ...

  4. BZOJ 3674/BZOJ 3673 主席树

    思路: 主席树维护可持久化数组 剩下的就是普通的并查集了- //By SiriusRen #include <cstdio> #include <cstring> #inclu ...

  5. BZOJ 3123 主席树 启发式合并

    思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...

  6. BZOJ 4448 主席树+树链剖分(在线)

    为什么题解都是离线的-- (抄都没法抄) 搞一棵主席树 1 操作 新树上的当前节点设成1 2 操作 查max(i-xx-1,0)那棵树上这条路径上有多少个点是1 让你找经过了多少个点 查的时候用dee ...

  7. BZOJ 3524主席树裸题 (雾)

    思路: 按权值建一棵主席树 (但是这好像不是正解 空间复杂度是不对的--.) //By SiriusRen #include <cstdio> #include <cstring&g ...

  8. BZOJ 3524 - 主席树

    传送门 题目分析 标准主席树,按照位置插入每个数,对于询问l, r, 在l-1,r两树上按照线段树搜索次数大于(r - l + 1) / 2的数. code #include<bits/stdc ...

  9. BZOJ 3932 - 主席树

    传送门 题目分析 在只打会主席树模板的情况下做了这道题,也算是深有体会. 首先任务可以差分:一个任务是(s, e, p), 则在s处+1, 在e+1处-1,符合前缀.但是我们要查询指定时间的前k任务之 ...

随机推荐

  1. 分析性能瓶颈的视图:v$session_wait

    这是一个寻找性能瓶颈的关键视图.它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件).当系统存在性能问题时,本视图可以做为一个起点指 ...

  2. 25.QT进度条

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> 5 #include <QProgressBar&g ...

  3. Qt-上位机-串口助手

    前言:参考自:https://blog.csdn.net/u014695839/article/details/50611549 一.新建Widgets Appliaction工程 二.设计ui界面 ...

  4. 1.Thinkphp入门--框架介绍

    1.Thinkphp款家最早诞生于2006年初,最初名叫fsc,2007年元旦改名thinkphp,由国人自主开发的框架,有中文的文档和社区 2.Tinkphp下载: 官网:http://www.th ...

  5. Linux目录结构(一)

    linux文件系统的最顶端是/,称为linux的root,所有的目录.文件.设备都在/之下. 文件类型 linux有四种基本文件系统类型:普通文件.目录文件.连续文件和特殊文件.可以用file命令来识 ...

  6. WIN7把任务栏的的蓝牙图标误删了找回方法

    当时我删了以后,在网上找方法,都说—— 点击任务栏下面的三角箭头,选择自定义,里面有蓝牙图标选项,选择显示图标和通知. 可是我发现我的自定义选项里面就没有蓝牙图标选项啊... 故事的最后,我终于找到了 ...

  7. GreenDao 3.X之基本使用

    在GreenDao 3.X之注解已经了解到GreenDao 3.0的改动及注解.对于数据库的操作,无异于增删改查等四个操作.下面我们将了解GreenDao 3.X如何使用? AbstractDao 所 ...

  8. ubuntu16.04 安装配置matlab+python +cuda8.0+cudnn+opencv3.1的caffe环境

    网络上有很多ubuntu上caffe配置环境的帖子,本人照着其中的许多进行了参考,都出现了或多或少的错误,很多地方也有差异. 于是自己整理了下自己的安装过程,成功进行了测试,跑通了faster-rcn ...

  9. 路飞学城Python-Day48

    49-清除浮动1:给父盒子设置高度 给父盒子设置高度,这种方式不灵活,公司的产品修改的时候,要求父盒子高度变大, 不可能去手动修改 尽量不要给父元素去修改高度,不建议这样的方式 <!DOCTYP ...

  10. Vue 实现前进刷新,后退不刷新的效果

    需求一: 在一个列表页中,第一次进入的时候,请求获取数据.点击某个列表项,跳到详情页,再从详情页后退回到列表页时,不刷新.也就是说从其他页面进到列表页,需要刷新获取数据,从详情页返回到列表页时不要刷新 ...