BZOJ 3674/BZOJ 3673 主席树
思路:
主席树维护可持久化数组
剩下的就是普通的并查集了…
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=200050;
int n,m,op,xx,yy,L[N*50],R[N*50],tree[N*50],root[N],cnt;
void build(int l,int r,int &pos){
if(!pos)pos=++cnt;
if(l==r){tree[pos]=l;return;}
int mid=(l+r)>>1;
build(l,mid,L[pos]),build(mid+1,r,R[pos]);
}
int query(int l,int r,int pos,int x){
if(l==r)return tree[pos];
int mid=(l+r)>>1;
if(mid<x)return query(mid+1,r,R[pos],x);
else return query(l,mid,L[pos],x);
}
void insert(int last,int l,int r,int &pos,int x,int change){
pos=++cnt;
if(l==r){tree[pos]=change;return;}
int mid=(l+r)>>1;
if(mid<x)L[pos]=L[last],insert(R[last],mid+1,r,R[pos],x,change);
else R[pos]=R[last],insert(L[last],l,mid,L[pos],x,change);
}
int find(int &root,int x){
int temp=query(1,n,root,x);
if(x==temp)return x;
int res=find(root,temp);
insert(root,1,n,root,x,res);
return res;
}
int main(){
scanf("%d%d",&n,&m),build(1,n,root[0]);
for(int i=1;i<=m;i++){
scanf("%d",&op);
if(op==1){
scanf("%d%d",&xx,&yy);
int fx=find(root[i-1],xx),fy=find(root[i-1],yy);
insert(root[i-1],1,n,root[i],fx,fy);
}
else if(op==2)scanf("%d",&xx),root[i]=root[xx];
else{
root[i]=root[i-1],scanf("%d%d",&xx,&yy);
if(find(root[i],xx)!=find(root[i],yy))puts("0");
else puts("1");
}
}
}
BZOJ 3674/BZOJ 3673 主席树的更多相关文章
- BZOJ 4556(后缀数组+主席树求前驱后继+二分||后缀数组+二分+可持久化线段树)
换markdown写了.. 题意: 给你一个1e5的字符串,1e5组询问,求\([l_1,r_1]\)的所有子串与\([l_2,r_2]\)的lcp 思路: 首先可以发现答案是具有单调性的,我们考虑二 ...
- BZOJ 3524: [Poi2014]Couriers [主席树]
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1892 Solved: 683[Submit][St ...
- bzoj 4012: [HNOI2015]开店 主席树
Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现 ...
- bzoj 4826: [Hnoi2017]影魔 [主席树 单调栈]
4826: [Hnoi2017]影魔 题意:一个排列,点对\((i,j)\),\(p=max(i+1,j-1)\),若\(p<a_i,a_j\)贡献p1,若\(p\)在\(a_1,a_2\)之间 ...
- BZOJ 3123: [Sdoi2013]森林 [主席树启发式合并]
3123: [Sdoi2013]森林 题意:一个森林,加边,询问路径上k小值.保证任意时刻是森林 LCT没法搞,树上kth肯定要用树上主席树 加边?启发式合并就好了,小的树dfs重建一下 注意 测试点 ...
- BZOJ 2809: [Apio2012]dispatching [主席树 DFS序]
传送门 题意:查询树上根节点值*子树中权值和$\le m$的最大数量 最大值是多少 求$DFS$序,然后变成区间中和$\le m$最多有几个元素,建主席树,然后权值线段树上二分就行了 $WA$:又把边 ...
- BZOJ.4299.Codechef FRBSUM(主席树)
题目链接 记mx为最大的满足1~mx都能组成的数. 考虑当前能构成1~v中的所有数,再加入一个数x,若x>v+1,则mx=v,x不会产生影响:否则x<=v+1,则新的mx=x+v. 对于区 ...
- BZOJ.4571.[SCOI2016]美味(主席树 贪心)
题目链接 要求 \(b\ xor\ (a_j+x)\) 最大,应让 \(a_j+x\) 的最高位尽可能与b相反.带个减法Trie树好像很难做?反正我不会. 从最高位开始,如果这位b是0/1,判断是否存 ...
- bzoj 3772 精神污染 主席树+dfs序
精神污染 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 637 Solved: 177[Submit][Status][Discuss] Descri ...
随机推荐
- Vim常用又容易忘的命令
一篇讲的不错的教程 :noh 取消搜索高亮 x 删当前光标所在的一个字符. :wq 存盘 + 退出 dd 删除当前行,并把删除的行存到剪贴板里 p 粘贴剪贴板 a → 在光标后插入 /pattern ...
- 移动端web开发初探之Vuejs的简单实战
这段时间在做的东西,是北邮人论坛APP的注册页.这个注册页是内嵌的网页,因为打算安卓和IOS平台同时使用.因此实际上就是在做移动端的web开发了. 在这过程中遇到了不少有意思的东西. DEMO的git ...
- JavaScript获取非行间样式
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- 用户 'NT Service\MSSQLServerOLAPService' 登录失败
初学SSAS,部署微软官方示例项目AdventureWorksDW2012Multidimensional时出现错误:用户 'NT Service\MSSQLServerOLAPService' 登录 ...
- 开发一款合格的APP成本费用大概是多少?
随着移动互联网的发展,APP开发已经成了当下最热门的话题.无数人都盼望做出下一个微信.滴滴打车等等神奇的APP软件.如今,APP开发门槛已经非常低,媒体上也充斥着各种小团队创造奇迹的故事.不过,APP ...
- 开启RxSwift之旅——开篇
开启RxSwift之旅——开篇 RxSwift 是 ReactiveX 在 Swift 下的实现.ReactiveX 是一个通过使用可观察序列来组合异步和基于事件的程序的库. 很多地方通常把 Reac ...
- CorelDRAW X7中相机滤镜呈现出的复古照片效果
CorelDRAW X7软件中相机效果滤镜较之以前版本又增添了许多功能,模拟各种“相机”镜头产生的效果,包括彩色.相片过滤器.棕褐色色调和时间器效果,可以让照片回到历史,展示过去流行的摄影风格.以下步 ...
- java类型和mysql类型的转换
Integer -----> int 11String -----> varchar 20Long -----> bigint 20String - ...
- SSH启动失败解决方法
今天连接linux时居然连不上,报错信息是: 查了一下终于找到了解决办法,只需要一些命令 : cd /etc/ssh sudo chmod 644 ./* sudo chmod 600 ssh_hos ...
- GNU/Linux分支图