主♂席♂树♂裸♂题

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. inclusion_tag 界面的嵌套 和渲染

    后端的html渲染到前端: 如果后端直接定义的是html标签,传到前端的时候因为浏览器的安全机制就会直接渲染成字符串如果想要渲染成需要的标签,就需要在后端用make_save()进行包裹,或者直接在前 ...

  2. [翻译] DDExpandableButton

    DDExpandableButton https://github.com/ddebin/DDExpandableButton Purpose - 目的 DDExpandableButton is a ...

  3. linux 创建新用户并增加管理员权限

    1.adduser与useradd有什么区别?2.那种方式会自动创建组.用户组等信息? 3.如何新建用户具有管理员权限? $是普通管员,#是系统管理员,root用户默认是没有密码的,因此也就无法使用( ...

  4. C++用法总结

    1.C++的绝对值符号 如果是整形的,就是abs() 如果是浮点型的,是fabs() 这两个函数都从属于库函数math.h #include <cmath> or #include< ...

  5. (1)封装 (2)static关键字 (3)继承

    1.封装(重中之重)1.1 基本概念 通常情况下,可以在测试类中给成员变量进行赋值,当给定的数值合法但不合理时,无论是编译还是运行阶段都不会报错或给出提示,此时与现实生活不符. 为了避免上述问题的发生 ...

  6. 微信小程序初始化 operateWXData:fail invalid scope

    初学者开发微信小程序,可以使用云开发来进行微信小程序的开发. 第一次使用开发工具遇到的问题 解决方案:1.找到云开发 2.点击开通,选择合适自己的开发环境: 3.完成后,返回开发工具界面点击项目第一个 ...

  7. ceph 分布式存储安装

    [root@localhost ~]# rm -rf /etc/yum.repos.d/*.repo 下载阿里云的base源 [root@localhost ~]# wget -O /etc/yum. ...

  8. Apache去掉index.php

    把 #LoadModule rewrite_module modules/mod_rewrite.so 前面的#去掉, 再把权限AllowOverride None都改为AllowOverride A ...

  9. 743. Network Delay Time

    题目来源: https://leetcode.com/problems/network-delay-time/ 自我感觉难度/真实难度: 题意: 分析: 自己的代码: class Solution: ...

  10. PAT乙级1020

    1020 月饼 (25 分)   月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. ...