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任务之 ...
随机推荐
- 19.QT对话框(文件对话框,颜色对话框,字体框,自定义对话框)
文件对话框 #include<QFileDialog> //文件对话框 void Dialog::on_pushButton_clicked() { //定义显示文件的类型 窗口标题 可供 ...
- 10.QT程序框架与connect
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setup ...
- BZOJ 2821 分块+二分
题意: N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次. 思路: 把N个数分成sqrt(n)块,预处理d[i][j]表示第i块起点到第j块末尾的答案 枚举起点i,并维护一个数组记录每个数到 ...
- 前端将图片二进制流显示在html端
工作中碰到的问题,在处理接口返回的验证码图片时,由于返回的是encode编码代码,在js端获取到数据之后,通过函数encodeURI()来进行解码,之后可以通过在src中设置来实现图片显示:
- MarkDown 语法备份
标题 标题1 标题2 标题3 标题4 标题5 无序列表 飞雪连天射白鹿 书神侠倚碧鸳 有序列表 飞雪连天射白鹿 笑书神侠倚碧鸳 超链接 百度 图片 粗体和斜体 粗体 斜体 表格 左对齐标题 右对齐标题 ...
- struts2学习之基础笔记1
第6章 Strusts 2框架 1 引出 Web App àà MVC àà View 视图(jsp,html,JS) | C(Servlet)Filter,Listneer | M(数据bea ...
- 个人对于React的Diff算法的一点疑问(待更新)
本人对于Diff算法也并未做深入研究,只是大概的看过一些博文了解了些原理,但依然有了如下疑问 : 对于vdom所表示的对象中,若在该oldObj和newObj之间,发现一个元素节点所表示的子对象不见了 ...
- MySQL查询结果保存到本地
#!/bin/bash mysql -h<公网IP> -P<端口号> -u<用户名> -p<密码> -D<指定数据库> >/Users ...
- ZBrush软件特性之Marker标记调控板
在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...
- ZBrush设计制作小怪兽并用KeyShot渲染
ZBrush为电影制作设计独特的生物概念重点向大家介绍了概念设计师Ian Joyner使用ZBrush®3D图形绘制软件雕刻面对镜头咆哮的生物半身像的具体过程,ZBrush创建好模型之后,要想让角色更 ...