[BZOJ 3720][JZYZOJ 2016]gty的妹子树 强制在线 树分块/树套树
先码着,强制在线的树分块或者树套树?关键是我树分块还在入门阶段树套树完全不会啊摔
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdlib>
using namespace std;
const int maxn=;
int n,m;
int lastans=;
int f[*maxn]={};
int ad=;
struct nod{
int y;
int next;
}e[maxn*];
struct node{
int num;
int a[];
inline int ask(int k){
int fff=upper_bound(a+,a+num+,k)-a-;
return num-fff;
}
}blo[];
struct no{
int next[maxn];
int ai[maxn];
int head[maxn];
int shu;
inline void add(int x,int y){
next[++shu]=head[x];
ai[shu]=y;
head[x]=shu;
}
}gre;
int bel[maxn]={};
int tail=;
int sz;
int a[maxn]={},head[maxn]={};
int tot=;
inline void init(int x,int y){
e[++tail].next=head[x];
e[tail].y=y;
head[x]=tail;
}
void dfs(int x,int fa){
int now=bel[x];
blo[now].a[++blo[now].num]=a[x];
f[x]=fa;
for(int i=head[x];i;i=e[i].next){
if(e[i].y==fa){
continue;
}
if(blo[now].num<sz){
bel[e[i].y]=now;
}
else{
bel[e[i].y]=++tot;
}
if(bel[e[i].y]!=now){
gre.add(now,bel[e[i].y]);
}
dfs(e[i].y,x);
}
}
int coun(int x,int k){
int ans=blo[x].ask(k);
for(int i=gre.head[x];i;i=gre.next[i]){
ans+=coun(gre.ai[i],k);
}
return ans;
}
int cnt(int x,int fa,int k){
int ans=a[x]>k;
for(int i=head[x];i;i=e[i].next){
if(e[i].y==fa) continue;
if(bel[e[i].y]==bel[x]){
ans+=cnt(e[i].y,x,k);
}
else{
ans+=coun(bel[e[i].y],k);
}
}
return ans;
}
int main(){
//freopen("wtf.in","r",stdin);
//freopen("wtf.out","w",stdout);
memset(e,,sizeof(e));
memset(blo,,sizeof(blo));
scanf("%d",&n);
ad=n;
int u,v;
sz=(int)sqrt((double)n);
for(int i=;i<n;i++){
scanf("%d%d",&u,&v);
init(u,v);
init(v,u);
}
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&m);
bel[]=++tot;
dfs(,);
for(int i=;i<=tot;++i){
sort(blo[i].a+,blo[i].a+blo[i].num+);
}
for(int op,u,x,i=;i<=m;++i){ scanf("%d%d%d",&op,&u,&x);
u^=lastans,x^=lastans;
if(op==){
printf("%d\n",lastans=cnt(u,f[u],x));
}
else if(op==){
int fr=bel[u];
for(int i=;i<=blo[fr].num;i++){
if(blo[fr].a[i]==a[u]){
blo[fr].a[i]=a[u]=x;
}
}
sort(blo[fr].a+,blo[fr].a++blo[fr].num);
}
else{
int fr=bel[u];
a[++ad]=x;
init(u,ad);
f[ad]=u;
if(blo[fr].num<sz){
bel[ad]=fr;
blo[fr].a[++blo[fr].num]=x;
sort(blo[fr].a+,blo[fr].a++blo[fr].num);
}
else{
bel[ad]=++tot;
blo[bel[ad]].a[++blo[bel[ad]].num]=x;
gre.add(fr,bel[ad]);
}
}
}
return ;
}
[BZOJ 3720][JZYZOJ 2016]gty的妹子树 强制在线 树分块/树套树的更多相关文章
- 【BZOJ】【4066】简单题(强制在线)
KD-Tree KD-Tree的进阶姿势戳这里 http://zyfzyf.is-programmer.com/posts/92431.html 为啥有种线段树&平衡树的即视感……(树形结构的 ...
- [主席树 强制在线]ZOJ3888 Twelves Monkeys
题意:有n年,其中m年可以乘时光机回到过去,q个询问 下面m行,x,y 表示可以在y年穿越回x年, 保证y>x 下面q个询问, 每个询问有个年份k 问的是k年前面 有多少年可以通过一种以上($\ ...
- [bzoj 3720] Gty的妹子树 (树上分块)
树上分块(块状树) Description 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕-- Gty神(xian)犇(chong)从来不缺妹子-- 他来到了 ...
- BZOJ 3720: Gty的妹子树 [树上size分块]
传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...
- bzoj 3744: Gty的妹子序列 主席树+分块
3744: Gty的妹子序列 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 101 Solved: 34[Submit][Status] Descr ...
- BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec Memory ...
- BZOJ 3744 Gty的妹子序列 (分块+树状数组+主席树)
题面传送门 题目大意:给你一个序列,多次询问,每次取出一段连续的子序列$[l,r]$,询问这段子序列的逆序对个数,强制在线 很熟悉的分块套路啊,和很多可持久化01Trie的题目类似,用分块预处理出贡献 ...
- BZOJ 3744 Gty的妹子序列
Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...
- 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1728 Solved: 513 Description Autumn ...
随机推荐
- idea中tomcat乱码问题解决
在idea中经常遇到jsp的乱码问题,原因是编码不是UTF-8的问题,这次来彻底解决idea的编码问题 首先设置idea编辑器的编码: File-Setting设置如下 然后配置tomcat的编码问题 ...
- 基于canvas的图片编辑合成器
在我们日常的前端开发中,经常会要给服务器上传图片,但是局限很大,图片只能是已有的,假设我想把多张图片合成一张上传就需要借助图片编辑器了,但是现在我们有了canvas合成就简单多了 首先我们看图片编辑器 ...
- webgote的例子(2)Sql注入(SearchGET)
Sql注入(Search/GET) 大家好!!! 现如今web服务在我们的网络上遍地都是,各个终端设备成为我们看不见的客户,web服务也成为公司的招牌.80 443为我们展现的视角也是多姿多彩但背后新 ...
- 17 - 路径操作-shutil模块
目录 1 路径操作 1.1 os.path模块 1.2 pathlib模块 1.2.1 目录操作 1.2.2 文件操作 1.3 os 模块 2 shutil模块 2.1 copy复制 2.2 rm删除 ...
- 148.Sort List---链表排序(冒泡、归并)
题目链接 题目大意:对链表进行排序,要求时间复杂度是o(nlgn). 法一:冒泡,不交换结点,而交换结点中的数值.超时了.代码如下: public ListNode sortList(ListNode ...
- 010 JVM类加载
转自http://www.importnew.com/23742.html 前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后 ...
- openjudge-NOI 2.6-1768 最大子矩阵
题目链接:http://noi.openjudge.cn/ch0206/1768/ 题解: 如果用O(n4)的算法肯定会炸,需要压缩掉一维的空间,只需要简单加和就好啦 例如,我们要对样例中第2-4行D ...
- ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#)
最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章 ...
- OC学习篇之---类的延展
来源:http://blog.csdn.net/jiangwei0910410003/article/details/41775603 前一篇文章我们介绍了类的类目概念和使用:http://blog. ...
- Linux Shell基础篇——变量
一.Shell中的变量 注:这里所说的Shell是Bash Shell,我姑且统称为Shell. Shell中的变量分为用户自定义变量.环境变量.位置参数变量.预定义变量.在Shell中,变量的默认类 ...