bzoj 1146 [CTSC2008]网络管理Network
很久之前写过 count on the tree。
然后一直不懂树状数组是怎么套上这个主席树的。
看了两小时发现它套的就是个权值线段树,
看不出来可持久化在哪里。
因为动态开点所以空间nlog2n。
树状数组维护dfs序,每个节点挂个线段树。
为了省空间拿原树建了个主席树。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 80005
using namespace std;
int n,q;
int t[N];
int head[N],ver[N*],nxt[N*],tot;
int li[N*],now[N*],cnt;
void add(int a,int b)
{
tot++;nxt[tot]=head[a];head[a]=tot;ver[tot]=b;return ;
}
struct node
{
int k,a,b;
}qq[N];
int zz,st[N],ed[N];
int dep[N];
int fa[N][];
void lca()
{
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
fa[j][i]=fa[fa[j][i-]][i-];
}
int lca(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
for(int i=;i>=;i--)if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
if(x==y)return x;
for(int i=;i>=;i--)
{
if(fa[x][i]!=fa[y][i])
{
x=fa[x][i];y=fa[y][i];
}
}
return fa[x][];
}
void dfs(int x,int f)
{
st[x]=++zz;
for(int i=head[x];i;i=nxt[i])
{
if(ver[i]==f)continue;
fa[ver[i]][]=x;
dep[ver[i]]=dep[x]+;
dfs(ver[i],x);
}
ed[x]=zz;
}
int root[N],rot[N];
struct Node
{
int l,r,sum;
}a[N*];
int num; void inrt(int x,int y,int l,int r,int pos)
{
if(l==r)
{
a[x].sum=a[y].sum+;
return ;
}
int mid=(l+r)>>;
if(pos<=mid)
{
if(!a[x].l)a[x].l=++num;
a[x].r=a[y].r;
inrt(a[x].l,a[y].l,l,mid,pos);
}
else
{
if(!a[x].r)a[x].r=++num;
a[x].l=a[y].l;
inrt(a[x].r,a[y].r,mid+,r,pos);
}
a[x].sum=a[a[x].l].sum+a[a[x].r].sum;
}
void build()
{
for(int i=;i<=n;i++)
{
if(!rot[i])rot[i]=++num;
inrt(rot[i],rot[fa[i][]],,cnt,now[i]);
}
}
void insert(int x,int l,int r,int pos,int z)
{
if(l==r)
{
a[x].sum+=z;return ;
}
int mid=(l+r)>>;
if(pos<=mid)
{
if(!a[x].l)a[x].l=++num;
insert(a[x].l,l,mid,pos,z);
}
else
{
if(!a[x].r)a[x].r=++num;
insert(a[x].r,mid+,r,pos,z);
}
a[x].sum=a[a[x].l].sum+a[a[x].r].sum;
}
void ad(int x,int z,int la)
{
for(int i=x;i<=n;i+=(i&(-i)))
{
if(!root[i])root[i]=++num;
insert(root[i],,cnt,z,la);
}
return ;
}
int no[N][];
int t1,t2,t3,t4;
int qur(int x,int y)
{
int as=;
for(int i=x;i;i-=(i&(-i)))
{
as+=a[a[no[i][y]].l].sum;
}
return as;
}
int qur(int l,int r,int kk,int r1,int r2,int r3,int r4)
{
if(l==r)
{
return l;
}
int mid=(l+r)>>;
int xx=a[a[r3].l].sum+a[a[r4].l].sum-a[a[r1].l].sum-a[a[r2].l].sum;
xx+=qur(st[t1],);xx+=qur(st[t2],);
xx-=qur(st[t3],);xx-=qur(st[t4],);
if(xx>=kk)
{
for(int i=st[t1];i;i-=(i&(-i)))no[i][]=a[no[i][]].l;
for(int i=st[t2];i;i-=(i&(-i)))no[i][]=a[no[i][]].l;
for(int i=st[t3];i;i-=(i&(-i)))no[i][]=a[no[i][]].l;
for(int i=st[t4];i;i-=(i&(-i)))no[i][]=a[no[i][]].l;
return qur(l,mid,kk,a[r1].l,a[r2].l,a[r3].l,a[r4].l);
}
else
{
for(int i=st[t1];i;i-=(i&(-i)))no[i][]=a[no[i][]].r;
for(int i=st[t2];i;i-=(i&(-i)))no[i][]=a[no[i][]].r;
for(int i=st[t3];i;i-=(i&(-i)))no[i][]=a[no[i][]].r;
for(int i=st[t4];i;i-=(i&(-i)))no[i][]=a[no[i][]].r;
return qur(mid+,r,kk-xx,a[r1].r,a[r2].r,a[r3].r,a[r4].r);
}
}
int main()
{
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)scanf("%d",&t[i]),li[++cnt]=t[i];
for(int i=;i<n;i++)
{
scanf("%d%d",&t1,&t2);
add(t1,t2);add(t2,t1);
}
for(int i=;i<=q;i++)
{
scanf("%d%d%d",&qq[i].k,&qq[i].a,&qq[i].b);
if(!qq[i].k)li[++cnt]=qq[i].b;
}
sort(li+,li+cnt+);
cnt=unique(li+,li+cnt+)-li-;
for(int i=;i<=n;i++)now[i]=lower_bound(li+,li+cnt+,t[i])-li;
dep[]=;dfs(,-);
lca();
build();
for(int i=;i<=q;i++)
{
if(!qq[i].k)
{
ad(st[qq[i].a],now[qq[i].a],-);
if(ed[qq[i].a]!=zz)ad(ed[qq[i].a]+,now[qq[i].a],);
now[qq[i].a]=lower_bound(li+,li+cnt+,qq[i].b)-li;
ad(st[qq[i].a],now[qq[i].a],);
if(ed[qq[i].a]!=zz)ad(ed[qq[i].a]+,now[qq[i].a],-);
}
else
{
int tmp=lca(qq[i].a,qq[i].b);
int yy=dep[qq[i].a]+dep[qq[i].b]-dep[tmp]*+;
if(yy<qq[i].k)
{
puts("invalid request!");
continue;
}
else
{
yy=yy-qq[i].k+;
for(int j=st[qq[i].a];j;j-=(j&(-j)))no[j][]=root[j];
for(int j=st[qq[i].b];j;j-=(j&(-j)))no[j][]=root[j];
for(int j=st[tmp];j;j-=(j&(-j)))no[j][]=root[j];
for(int j=st[fa[tmp][]];j;j-=(j&(-j)))no[j][]=root[j];
t1=qq[i].a;t2=qq[i].b;t3=tmp;t4=fa[tmp][];
int tp=qur(,cnt,yy,rot[tmp],rot[fa[tmp][]],rot[qq[i].a],rot[qq[i].b]);
printf("%d\n",li[tp]);
}
}
}
return ;
}
bzoj 1146 [CTSC2008]网络管理Network的更多相关文章
- BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3522 Solved: 1041[Submi ...
- BZOJ 1146: [CTSC2008]网络管理Network 树链剖分+线段树+平衡树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 870 Solved: 299[Submit] ...
- BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )
树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT+(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. ...
- BZOJ 1146: [CTSC2008]网络管理Network 带修改主席树_树套树_DFS序
Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路 ...
- [BZOJ 1146] [CTSC2008]网络管理Network(树状数组+主席树)
题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高 ...
- 【BZOJ】1146: [CTSC2008]网络管理Network(树链剖分+线段树套平衡树+二分 / dfs序+树状数组+主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1146 第一种做法(时间太感人): 第二种做法(rank5,好开心) ================ ...
- 洛谷 P4175: bzoj 1146: [CTSC2008]网络管理
令人抓狂的整体二分题.根本原因还是我太菜了. 在学校写了一个下午写得头晕,回家里重写了一遍,一个小时就写完了--不过还是太慢. 题目传送门:洛谷P4175. 题意简述: 一棵 \(n\) 个结点的树, ...
- [BZOJ1146][CTSC2008]网络管理Network
[BZOJ1146][CTSC2008]网络管理Network 试题描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建 ...
- Luogu4175:[CTSC2008]网络管理Network
题面 Luogu4175:[CTSC2008]网络管理Network Sol 路径第\(k\)大 无解直接判断就好了 然后整体二分,加上树链剖分+树状数组统计 # include <bits/s ...
随机推荐
- (学习笔记)laravel 中间件
(学习笔记)laravel 中间件 laravel的请求在进入逻辑处理之前会通过http中间件进行处理. 也就是说http请求的逻辑是这样的: 建立中间件 首先,通过Artisan命令建立一个中间件. ...
- mysql 用户管理和权限设置
用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...
- jdk源码分析PriorityQueue
一.结构 PriorityQueue是一个堆,任意节点都是以它为根节点的子树中的最小节点 堆的逻辑结构是完全二叉树状的,存储结构是用数组去存储的,随机访问性好.最小堆的根元素是最小的,最大堆的根元素是 ...
- 深入理解 RESTful Api 架构
转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api 就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
- css单行文本与多行溢出文本的省略号问题
在文字布局和代码编写过程中遇到文本溢出是常有的事,下面总结一下对于单行文本溢出和多行文本溢出省略号的处理. 一.单行文本省略号 <p class="text1"> 这是 ...
- Atittit.研发公司的组织架构与部门架构总结
Atittit.研发公司的组织架构与部门架构总结 1. archi组织架构与 部门规划2 1.1. 最高五大组织机构2 1.2. 宗教事务部2 1.3. 制度与重大会议委员会2 1.4. 纠纷处理部: ...
- 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
备注:企业用户还是少用360为妙 有客户反馈:部门里的XP SP2环境客户机全部异常,使用资源管理器打开Sharepoint文档库,看到的界面样式很老土,跟本地文件夹不一样 ...
- 事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序
一直想弄清楚onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent的执行顺序,以及内部使用switch (event.getAction())中的执 ...
- 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra
问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...