jzyzoj的p2016

先码着,强制在线的树分块或者树套树?关键是我树分块还在入门阶段树套树完全不会啊摔

 
http://blog.csdn.net/jiangyuze831/article/details/41445003
果然我除了抄代码什么也不会......树分块之类的东西完全不会计算复杂度.....
似乎upper_bound非常浪费时间..所以更改的时候直接循环查找不然会超时......
static这种东西不要胡乱用......如果在后面直接赋值会赋值不上........
看代码就能想起来具体内容所以不需要那么详细解释了......
树分块↓
 #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的妹子树 强制在线 树分块/树套树的更多相关文章

  1. 【BZOJ】【4066】简单题(强制在线)

    KD-Tree KD-Tree的进阶姿势戳这里 http://zyfzyf.is-programmer.com/posts/92431.html 为啥有种线段树&平衡树的即视感……(树形结构的 ...

  2. [主席树 强制在线]ZOJ3888 Twelves Monkeys

    题意:有n年,其中m年可以乘时光机回到过去,q个询问 下面m行,x,y 表示可以在y年穿越回x年, 保证y>x 下面q个询问, 每个询问有个年份k 问的是k年前面 有多少年可以通过一种以上($\ ...

  3. [bzoj 3720] Gty的妹子树 (树上分块)

    树上分块(块状树) Description 我曾在弦歌之中听过你, 檀板声碎,半出折子戏. 舞榭歌台被风吹去, 岁月深处尚有余音一缕-- Gty神(xian)犇(chong)从来不缺妹子-- 他来到了 ...

  4. BZOJ 3720: Gty的妹子树 [树上size分块]

    传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...

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

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

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

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

  7. BZOJ 3744 Gty的妹子序列 (分块+树状数组+主席树)

    题面传送门 题目大意:给你一个序列,多次询问,每次取出一段连续的子序列$[l,r]$,询问这段子序列的逆序对个数,强制在线 很熟悉的分块套路啊,和很多可持久化01Trie的题目类似,用分块预处理出贡献 ...

  8. BZOJ 3744 Gty的妹子序列

    Description 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见-- 某天,蒟蒻Autumn发现了从 Gty的妹子树上掉落下来了许多妹子,他发现 她们排成了一个序 ...

  9. 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1728  Solved: 513 Description Autumn ...

随机推荐

  1. 【BZOJ】3527: [Zjoi2014]力 FFT

    [参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...

  2. PHP文本式留言板——php经典实例

    文件结构: index.php 主页和添加页 show.php 查看留言页 ly.db 文本保存页 doAdd.php 添加功能页 doDel.php 删除功能页  index.php <htm ...

  3. layui实现类似于bootstrap的模态框功能

    以前习惯了bootstrap的模态框,突然换了layui,想的用layui实现类似于bootstrap的模态框功能. 用到了layui的layer模块,例如: <!DOCTYPE html> ...

  4. makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解【转】

    转自:http://www.cnblogs.com/lifexy/p/7065175.html 在linux中输入vi Makefile 来实现创建Makefile文件 注意:命令行前必须加TAB键 ...

  5. Ubuntu10.04 下安装RabbitVCS

    安装RabbitVCS的方法步骤如下: 1.sudo add-apt-repository ppa:rabbitvcs/ppa       #将rabbitvcs的添加到源里面.(次操作会提示是否要添 ...

  6. localhost或127.0.0.1或192.168.1.*被转到129129.com上的问题

    系统启动里会有个httpd的apache程序在运行,自启禁用掉后.windows下有个apache文件夹,干掉就可以. 个别GHOST XP程序里面会装这种流氓程序.

  7. Linux 上配置 NTP SERVER

    在CENTOS 6.2上面安装配置NTP SERVER 安装NTP:yum install ntp 配置时间源vi /etc/ntp.confserver 210.72.145.44server nt ...

  8. Transport failed: java.io.EOFException

    ActiveMQ服务端有时会报Transport failed: java.io.EOFException这样的错误,这是由客户端丢失连接并反复尝试连接导致的,不是什么大问题,有时网络波动就会产生这种 ...

  9. 4、GitLab 创建、删除、修改项目

    一.gitLab创建项目 1.创建用户组 2.填写组信息后单击“Create group” 其中:“Group path”将显示在git路径中 3.选择需要加入该组的“用户”和“角色”后点击“Add ...

  10. (My)SQL

    1.SQL语句分类 DDL(Data Definition Languages)语句:用来创建 删除 修改数据库.表.列.索引等数据库对象.常用的语句关键字主要包括create.drop.alter等 ...