主♂席♂树♂裸♂题

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. 新建一个去除storyboard的项目

    新建一个去除storyboard的项目 1. 新建项目并删除 *.storyboard 以及与之相关的杂项 2. 设置 UIWindow 的 rootViewController 复制粘贴代码如下 s ...

  2. Laravel 实践之路: 数据库迁移与数据填充

    数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...

  3. C# HttpWebRequest 笔记

    目录: 1,HttpWebRequest 实例化 2,GetResponse 获取请求结果 3,获取结果 4,获取流信息 HttpWebRequest 是一个Http 请求类,继承于 WebReque ...

  4. (1)String类 (2)StringBuilder类和StringBuffer类 (3)日期相关的类

    1.String类(重中之重)1.1 常用的方法(练熟.记住)(1)常用的构造方法 String() - 使用无参的方式构造空字符串对象. String(byte[] bytes) - 根据参数指定的 ...

  5. 禁用loop back check

    在sharepoint 2013 服务器上,如果修改了AAM (alternate access mappings), 在服务器上访问本地的sharepoint就会一直弹出登陆窗口,无法访问. 于是必 ...

  6. Programming Assignment 5: Burrows–Wheeler Data Compression

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

  7. MEMCACHE与REDIS

    千万数据量的高并发,容灾. Redis 基于单线程, 持久性 多数据类型 内存中只存KEY Redis支持数据的备份,即master-slave模式的数据备份. Redis与Memcached的区别 ...

  8. 用python解析word文件(三):style

    太长了,我决定还是拆开三篇写.   (一)段落篇(paragraph) (二)表格篇(table) (三)样式篇(style)(本篇) 选你所需即可.下面开始正文. 在前两篇中,我们已经解析出了par ...

  9. Ingress 暴露tcp端口

    有一部分应用 需要暴露tcp端口,查看官方文档 https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/expo ...

  10. ZOJ 3203 Light Bulb (三分+计算几何)

    B - Light Bulb Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit ...