传送门

好珂怕……

树分块是什么东西啊……感觉好暴力……

直接贴一下好了->这里

 //minamoto
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[<<],z[];int C=-,Z;
inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
inline void print(int x){
if(C><<)Ot();if(x<)sr[++C]=,x=-x;
while(z[++Z]=x%+,x/=);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=,SIZE=;
int head[N],Next[N<<],ver[N<<],tot;
inline void add(int u,int v){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot;
}
int n,m,cnt,w[N],bh[N],bt,fa[N],belong[N],bn[N<<],bv[N<<];
struct Block{
vector<int> a;
Block(){a.clear();}
inline void ins(int x){
a.push_back(x);
for(int i=a.size()-;i;--i)
if(a[i-]>a[i]) swap(a[i-],a[i]);else break;
}
inline void update(int x,int k){
int pos=lower_bound(a.begin(),a.end(),x)-a.begin();
a[pos]=k;
for(int i=pos;i;--i)
if(a[i-]>a[i]) swap(a[i-],a[i]);else break;
for(int i=pos,s=a.size()-;i<s;++i)
if(a[i]>a[i+]) swap(a[i],a[i+]);else break;
}
inline int query(int x){
return a.end()-upper_bound(a.begin(),a.end(),x);
}
}bl[N];
inline void add_bl(int u,int v){
bv[++bt]=v,bn[bt]=bh[u],bh[u]=bt;
}
void dfs(int u,int f){
fa[u]=f;
if(bl[belong[f]].a.size()==SIZE){
belong[u]=++cnt;
bl[cnt].ins(w[u]);
add_bl(belong[f],cnt);
}
else{
belong[u]=belong[f],bl[belong[u]].ins(w[u]);
}
for(int i=head[u];i;i=Next[i]){
if(ver[i]!=f) dfs(ver[i],u);
}
}
int dfsbl(int u,int k){
int ans=bl[u].query(k);
for(int i=bh[u];i;i=bn[i])
ans+=dfsbl(bv[i],k);
return ans;
}
int dfsans(int u,int k){
int ans=w[u]>k?:;
for(int i=head[u];i;i=Next[i]){
int v=ver[i];
if(v==fa[u]) continue;
if(belong[v]==belong[u]) ans+=dfsans(v,k);
else ans+=dfsbl(belong[v],k);
}
return ans;
}
int main(){
//freopen("testdata.in","r",stdin);
n=read();
for(int i=;i<n;++i){
int u=read(),v=read();add(u,v),add(v,u);
}
for(int i=;i<=n;++i) w[i]=read();
dfs(,);
m=read();
int ans=;
while(m--){
int opt=read(),u=read(),x=read();
u^=ans,x^=ans;
switch(opt){
case :ans=dfsans(u,x);print(ans);break;
case :bl[belong[u]].update(w[u],x);w[u]=x;break;
case :{
w[++n]=x,add(u,n),fa[n]=u;
if(bl[belong[u]].a.size()==SIZE){
belong[n]=++cnt,bl[cnt].ins(w[n]);
add_bl(belong[u],cnt);
}
else{
belong[n]=belong[u],bl[belong[n]].ins(w[n]);
}
break;
}
}
}
Ot();
return ;
}

bzoj3720: Gty的妹子树(树分块)的更多相关文章

  1. BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec  Memory ...

  2. BZOJ3720 Gty的妹子树 【树分块】

    题目 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕-- Gty神(xian)犇(chong)从来不缺妹子-- 他来到了一棵妹子树下,发现每个妹子有一个美丽度 ...

  3. BZOJ3720 Gty的妹子树 询问分块、主席树

    传送门 学到了询问分块的科技-- 对于修改操作,每发生了\(S\)次修改就重构整棵树,小于\(S\)次的修改操作丢到一个队列里面. 对于每一次查询操作,先在主席树上查询当前子树内部大于\(k\)的节点 ...

  4. BZOJ3744 Gty的妹子序列(分块+树状数组)

    题意 询问区间内逆序对数  强制在线 1<=n<=50000 1<=m<=50000 题解 两个预处理f[i][j]为块i到j的逆序对数,s[i][j]前i块≤j的有多少个边角 ...

  5. 【BZOJ3720】Gty的妹子树 块状树

    [BZOJ3720]Gty的妹子树 我曾在弦歌之中听过你,檀板声碎,半出折子戏.舞榭歌台被风吹去,岁月深处尚有余音一缕……Gty神(xian)犇(chong)从来不缺妹子……他来到了一棵妹子树下,发现 ...

  6. bzoj 3744: Gty的妹子序列 主席树+分块

    3744: Gty的妹子序列 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 101  Solved: 34[Submit][Status] Descr ...

  7. 【BZOJ3744】Gty的妹子序列 分块+树状数组

    [BZOJ3744]Gty的妹子序列 Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzo ...

  8. [BZOJ 3731] Gty的超级妹子树 (树分块)

    [BZOJ 3731] Gty的超级妹子树 (树分块) 题面 给出一棵树(或森林),每个点都有一个值.现在有四种操作 1.查询x子树里>y的值有多少个 2.把点x的值改成y 3.添加一个新节点, ...

  9. BZOJ 3744 Gty的妹子序列 (分块 + BIT)

    3744: Gty的妹子序列 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1931  Solved: 570[Submit][Status][Dis ...

随机推荐

  1. 学习c++的优秀博客(转)

    http://zhedahht.blog.163.com/  本博客讨论程序员面试题,并主要集中在C/C++.数据结构算法和算法上.http://saturnman.blog.163.com/ sat ...

  2. Python-单元测试unittest

    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,概念见下: TestCase 也就是测试用例 Test ...

  3. Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

    原文:http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html Tomcat启动分析(我们为什么要配置CATALIN ...

  4. python中的排序函数

    1.sort() list类型有一个自带的排序函数sort() list.sort(cmp=None, key=None, reverse=False) 参数说明: (1)  cmp参数 cmp接受一 ...

  5. Smooks:xml-to-java

    引言: Smooks是一个开源的Java框架,用于处理“数据事件流”.它常常被认为是一个转换框架并以此被用于好几个产品和项目中,包括JBoss ESB(以及其它ESB).然而究其核心,Smooks未提 ...

  6. FFMPEG实现的转码程序

    本例子是由FFEMPG的doc/example例子transcode.c修改而来,可以根据需求任意转换音视频的编码. 原来的例子的作用更类似于remux,并没有实现转码的功能,只是实现了格式转换,比如 ...

  7. ffmpeg第三方库编译记录

    最近在研究ffmpeg的编译,之前使用的Ubuntu,需要安装虚拟机,非常麻烦,所以后来改研究在Windows平台编译. 一开始遇到很多挫折,参考了网上很多的帖子,但要么不全要么内容已过期,经过我的反 ...

  8. Agc018_B Sports Festival

    传送门 题目大意 有$n$个人,$m$种运动$(n,m\leq 300)$,每个人对$m$种运动有喜爱度的排名. 请你划分一个$m$种运动的非空集合,使得当每个人参加集合内喜爱度排名最高的运动时,最多 ...

  9. Code Chef - Chef and Graph Queries

    传送门 题目大意 给定一个$n$个点$m$条边的无向图$(n,m\leq 200000)$. 有$q$每次询问$(q\leq 200000)$,每次给定一个区间$L,R$,求仅保留编号$\in[L,R ...

  10. 交互式 shell 玩转 Python

    Python 编程语言已经成为 IT 中使用的最流行的语言之一.成功的一个原因是它可以用来解决各种问题.从网站开发到数据科学.机器学习到任务自动化,Python 生态系统有丰富的框架和库.本文将介绍 ...