BZOJ 3720 树分块
借鉴了别人的代码……
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 66666
struct Blocks{
int a[210],size;
void Insert(int x){
++size;int i;
for(i=size;i>1&&a[i-1]>x;i--)a[i]=a[i-1];
a[i]=x;
}
void Modify(int x,int y){
int temp=lower_bound(a+1,a+1+size,x)-a;
for(;temp<size&&a[temp+1]<y;temp++)a[temp]=a[temp+1];
for(;temp>1&&a[temp-1]>y;temp--)a[temp]=a[temp-1];
a[temp]=y;
}
int Query(int x){
return size-(upper_bound(a+1,a+1+size,x)-a)+1;
}
}blocks[10500];
int n,m,op,xx,yy,block,cnt,ans,a[N],fa[N],belong[N];
int first[N],bfirst[N],next[N*2],v[N*2],tot;
void add(int Head[],int x,int y){v[tot]=y,next[tot]=Head[x],Head[x]=tot++;}
void DFS(int x){
if(blocks[belong[fa[x]]].size==block)
blocks[belong[x]=++cnt].Insert(a[x]),add(bfirst,belong[fa[x]],cnt);
else blocks[belong[x]=belong[fa[x]]].Insert(a[x]);
for(int i=first[x];~i;i=next[i])
if(v[i]!=fa[x])fa[v[i]]=x,DFS(v[i]);
}
void bdfs(int x,int y){
ans+=blocks[x].Query(y);
for(int i=bfirst[x];~i;i=next[i])bdfs(v[i],y);
}
void dfs(int x,int y){
if(a[x]>y)ans++;
for(int i=first[x];~i;i=next[i])
if(v[i]!=fa[x]){
if(belong[v[i]]==belong[x])dfs(v[i],y);
else bdfs(belong[v[i]],y);
}
}
int main(){
memset(first,-1,sizeof(first)),memset(bfirst,-1,sizeof(bfirst));
scanf("%d",&n);
for(int i=1;i<n;i++)
scanf("%d%d",&xx,&yy),add(first,xx,yy),add(first,yy,xx);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
block=int(sqrt(n)+0.5),DFS(1);
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&op,&xx,&yy),xx^=ans,yy^=ans;
if(!op){ans=0;dfs(xx,yy);printf("%d\n",ans);}
else if(op==1)blocks[belong[xx]].Modify(a[xx],yy),a[xx]=yy;
else{
a[++n]=yy,add(first,xx,n),fa[n]=xx;
if(blocks[belong[xx]].size==block)
blocks[belong[n]=++cnt].Insert(a[n]),add(bfirst,belong[xx],cnt);
else blocks[belong[n]=belong[xx]].Insert(a[n]);
}
}
}
BZOJ 3720 树分块的更多相关文章
- bzoj 1086 树分块
将树分成一些块,做法见vfleaking博客. /************************************************************** Problem: 108 ...
- BZOJ.3720.Gty的妹子树(树分块)
题目链接 洛谷上惨遭爆零是为什么.. 另外这个树分块算法是假的. /* 插入删除只涉及一个数,故每次可以枚举一遍,而不是重构完后sort */ #include<cmath> #inclu ...
- [BZOJ 3720][JZYZOJ 2016]gty的妹子树 强制在线 树分块/树套树
jzyzoj的p2016 先码着,强制在线的树分块或者树套树?关键是我树分块还在入门阶段树套树完全不会啊摔 http://blog.csdn.net/jiangyuze831/article/de ...
- bzoj 3720 Gty的妹子树 树分块?瞎搞
Gty的妹子树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2149 Solved: 781[Submit][Status][Discuss] D ...
- [BZOJ 1086] [SCOI2005] 王室联邦 【树分块】
题目链接:BZOJ - 1086 题目分析 这道题要求给树分块,使得每一块的大小在 [B, 3B] 之间,并且可以通过一个块外的节点(块根)使得整个块联通. 那么我们使用一种 DFS,维护一个栈,DF ...
- 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法
[题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...
- [BZOJ 3731] Gty的超级妹子树 (树分块)
[BZOJ 3731] Gty的超级妹子树 (树分块) 题面 给出一棵树(或森林),每个点都有一个值.现在有四种操作 1.查询x子树里>y的值有多少个 2.把点x的值改成y 3.添加一个新节点, ...
- 【BZOJ 3735】苹果树 树上莫队(树分块+离线莫队+鬼畜的压行)
2016-05-09 UPD:学习了新的DFS序列分块,然后发现这个东西是战术核导弹?反正比下面的树分块不知道要快到哪里去了 #include<cmath> #include<cst ...
- 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法
[题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...
随机推荐
- SQL Server数据库备份的几个建议
1.定期进行数据备份(完备或差异备份)和日志备份. 2.使用压缩备份来减少磁盘空间占用和提高备份效率. 3.定期检查磁盘剩余空间和备份文件增长情况,以确保有足够空间进行下一次备份. 4.使用校验和(C ...
- swift的属性与变量- Stored Properties and Instance Variables
是一个概念 Stored Properties and Instance Variables If you have experience with Objective-C, you may know ...
- [noip2011]计算系数+二项式定理证明
大水题,二项式定理即可(忘得差不多了) 对于一个二项式,\((a+b)^n\)的结果为 \(\sum_{k=0}^{k<=n}C_{n}^{k}a^{n-k}b^k\) 证明: 由数学归纳法,当 ...
- 【Computer Vision】 复现分割网络(1)——SegNet
目录 Tags: ComputerVision 编译 数据处理 训练结果 Reference Tags: ComputerVision 编译 src/caffe/layers/contrastive_ ...
- linux ubuntu安装好后,开通远程登录
1.设置root密码 ubuntu安装好后,用初始的第一个用户登录,然后修改root密码: sudo passwd root 2.检查sshd服务是否启动 (1)查看sshd状态 -----若没有ss ...
- 微信公众号开发之获取微信用户的openID
(注:openID同一用户同一应用唯一,UnionID同一用户不同应用唯一.不同应用指微信开放平台下的不同用户.) 1. 申请测试号(获得appID.appsecret) 2. 填写服务器配置并验 ...
- Android内存管理-SoftReference的使用
本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...
- Ubuntu中的Docker搭建Tensorflow环境
一.docker环境安装 1)更新.安装依赖包 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates ...
- C# 日期格式
# DateTime日期格式化 在C#中DateTime是一个包含日期.时间的类型,此类型通过ToString()转换为字符串时,可根据传入给Tostring()的参数转换为多种字符串格式. 目录 1 ...
- 工具-VS2015前端开发工具简介
每个涉及的工具库都给出了入门介绍.基本概念,以及在VS和ASP.NET中的用法.这个白皮书完全就是一个非常难得的前端开发入门手册. 具体涉及到的工具库有: 流行的JS任务执行器:Grunt和Gulp. ...