主♂席♂树♂裸♂题

https://syzoj.com/problem/279

https://oj.changjun.com.cn/problem/detail/pid/2425

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#define il inline
#define rg register
#define vd void
#define sta static
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int _=30001;
int n,w[_],dfn[_],ed[_];
namespace cmt{
#define mid ((l+r)>>1)
typedef const int& ci;
const int __=_*100;
int index,rt[10001],ls[__],rs[__],sum[__];
il vd update(int&x,int l,int r,ci o,ci p){
if(!x)x=++index;sum[x]+=o;
if(l==r)return;
if(p<=mid)update(ls[x],l,mid,o,p);
else update(rs[x],mid+1,r,o,p);
}
il vd Update(int x,int p,int o){for(rg int i=p;i<=10000;i+=i&-i)update(rt[i],1,n,o,x);}
il int query(int x,int l,int r,int L,int R){
if(!sum[x])return 0;
if(L<=l&&r<=R)return sum[x];
if(L<=mid)
if(mid<R)return query(ls[x],l,mid,L,R)+query(rs[x],mid+1,r,L,R);
else return query(ls[x],l,mid,L,R);
else return query(rs[x],mid+1,r,L,R);
}
il int Query(int a,int b,int l,int r){
int ret=0;
for(rg int i=b;i;i-=i&-i)ret+=query(rt[i],1,n,l,r);
for(rg int i=a-1;i;i-=i&-i)ret-=query(rt[i],1,n,l,r);
//printf("%d %d %d %d %d\n",a,b,l,r,ret);
return ret;
}
#undef mid
}
namespace tree{
int fir[_],nxt[_*2],dis[_*2];
il vd link(int x,int y){
sta int id;
nxt[++id]=fir[x],fir[x]=id,dis[id]=y;
nxt[++id]=fir[y],fir[y]=id,dis[id]=x;
}
il vd dfs(int x,int fa=-1){
dfn[x]=++dfn[0];
for(int i=fir[x];i;i=nxt[i])
if(fa!=dis[i])dfs(dis[i],x);
ed[x]=dfn[0];
}
il vd prepare(){
dfs(1);
for(rg int i=1;i<=n;++i)cmt::Update(dfn[i],w[i],1);
}
}
int main(){
#ifdef xzz
freopen("huaji.in","r",stdin);
freopen("huaji.out","w",stdout);
#endif
n=gi();
for(rg int i=1;i<=n;++i)w[i]=gi();
for(rg int i=1;i<n;++i)tree::link(gi(),gi());
tree::prepare();
int q=gi(),o,a,b,u;
while(q--){
o=gi();
if(o==1){
u=gi(),a=gi();
int l=1,r=10000,mid;
while(l<r){
mid=(l+r)>>1;
if(cmt::Query(1,mid,dfn[u],ed[u])<a)l=mid+1;
else r=mid;
}
printf("%d\n",l);
}else if(o==2){
u=gi(),a=gi(),b=gi();
printf("%d\n",cmt::Query(a,b,dfn[u],ed[u]));
}else if(o==3){
u=gi(),a=gi();
cmt::Update(dfn[u],w[u],-1);
cmt::Update(dfn[u],w[u]=a,1);
}else puts("FA♂Q");
}
return 0;
}

[SYZOJ279]滑♂稽♂树的更多相关文章

  1. 【SYZOJ279】滑稽♂树(树套树)

    [SYZOJ279]滑稽♂树(树套树) 题面 SYZOJ CJOJ 题目描述 zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到.虽然我们看不到,但是还是知道一些信息: 这真 ...

  2. 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解

    https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...

  3. Codeforces Round #345 (Div. 2)——A. Joysticks(模拟+特判)

    A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  4. 【10.7校内测试】【队列滑窗】【2-sat】【贪心+栈二分+线段树(noip模拟好题)】【生日祭!】

    比较好想的一道题,直接用队列滑窗,因为扫一遍往队列里加东西时,改变的只有一个值,开桶储存好就行了! #include<bits/stdc++.h> using namespace std; ...

  5. 如丝般顺滑:DDD再实践之类目树管理

    在上次反思DDD实践之后,在类目树管理项目中再次实践DDD.从需求分析到建模和具体的落地,结合个人体会,都是干货.

  6. 基于bootstrap的jQuery多级列表树插件 treeview

    http://www.cnblogs.com/mfc-itblog/p/5233453.html http://www.htmleaf.com/jQuery/Menu-Navigation/20150 ...

  7. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  8. 基于bootstrap的jQuery多级列表树插件

    简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...

  9. 【右滑返回】滑动冲突 Scroller DecorView

    基本思想 我们的滑动逻辑主要是利用View的scrollBy() 方法, scrollTo()方法和Scroller类来实现的 当手指拖动视图的时候,我们监听手指在屏幕上滑动的距离 利用View的sc ...

随机推荐

  1. 转:spring 的控制反转

    文章一,原文地址:http://blog.sina.com.cn/s/blog_63804f6f0100kfx0.html 控制反转:       IoC(Inversion of Control,控 ...

  2. Python学习---模拟微信网页登录180410

    WEB微信 网页登录的猜想: a. 访问页面出现二维码 b. 长轮询监听是否已经扫码并且点击确认 c. 如何进行会话保持 d. 如何获取用户列表 e. 如何发送消息(接收消息) 过程:访问微信官网[h ...

  3. 【转载】 C语言命令行小猪佩奇

    // ASCII Peppa Pig by Milo Yip #include <math.h> #include <stdio.h> #include <stdlib. ...

  4. 深入理解python中的yield关键字

    想必大家都看过这样的代码: 上面的这段代码会计算0-9的平方并打印出来. 那么问题来了,这段代码和我们要说的东西有什么区别呢? 这里的关键字,yield,我在前面的文章里已经发过了.那么yield是什 ...

  5. Mycat分片规则详解

    1.分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: <tab ...

  6. 网络编程--Socket(套接字)

    网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中 有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后 如何可靠高效的进行数据传输.在 ...

  7. 【MSSQL教程】#001 整体思维导图

    整个MSSQL体系的一个思维导图,方便理解整个MSSQL需要学习那些方面的知识.

  8. Programming Assignment 5: Burrows–Wheeler Data Compression

    编程作业五 作业链接:Burrows-Wheeler Data Compression & Checklist 我的代码:MoveToFront.java & CircularSuff ...

  9. [转]Linux下查看CPU信息、机器型号等硬件信息

    From: http://www.jbxue.com/LINUXjishu/14582.html 查看CPU信息(型号) : # cat /proc/cpuinfo | grep name | cut ...

  10. const修饰的成员是类成员,还是实例成员?

    很抱歉,我以为只有static修饰的成员是类成员,可以通过类名直接访问,然而,const 修饰的成员也属于类成员,直接通过类名访问,不能通过实例变量访问. 做维护久了,深刻的理解,扎实的基础对写出高质 ...