图片加载可能有点慢,请跳过题面先看题解,谢谢



这个题好多解法啊。。。
可以主席树,可以按深度将操作排序离线做
我这里是动态开点线段树,对每一个深度种一棵线段树,下标是节点的\(dfs\)序
然后这个做法就很简单啊。。。
$
$

//made by Hero_of_Someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#define inf (1<<30)
#define N (600010)
#define il inline
#define RG register
using namespace std;
il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();
  if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }

int n,m,deep[N],w[N],st[N],ed[N],tim;
int rt[N],sum[N<<2],ls[N<<2],rs[N<<2],cnt;
int num,head[N],nxt[N<<1],to[N<<1];
il void add(int u,int v){
   nxt[++num]=head[u];to[num]=v;head[u]=num;
   nxt[++num]=head[v];to[num]=u;head[v]=num;
}

il void dfs(int x,int f){
   st[x]=++tim;
   deep[x]=deep[f]+1;
   for(int i=head[x];i;i=nxt[i]){
      int v=to[i]; if(v==f) continue;
      dfs(v,x);
   }
   ed[x]=tim;
}

il void update(int &x,int l,int r,int k,int val){
   if(!x) x=++cnt;
   if(l==r){ sum[x]=val; return ; }
   RG int mid=(l+r)>>1;
   if(k<=mid) update(ls[x],l,mid,k,val);
   else update(rs[x],mid+1,r,k,val);
   sum[x]=sum[ls[x]]+sum[rs[x]];
}

il void init(){
   n=gi();
   for(int i=1;i<=n;i++) w[i]=gi();
   for(int i=1;i<n;i++){
      int u=gi(),v=gi();
      add(u,v);
   }
   dfs(1,0);
   for(int i=1;i<=n;i++)
      update(rt[deep[i]],1,n,st[i],w[i]);
}

il int query(int x,int l,int r,int L,int R){
   if(!x) return 0;
   if(L==l && r==R) return sum[x];
   int mid=(l+r)>>1,ret=0;
   if(R<=mid) return query(ls[x],l,mid,L,R);
   else if(L>mid) ret+=query(rs[x],mid+1,r,L,R);
   else return query(ls[x],l,mid,L,mid)+query(rs[x],mid+1,r,mid+1,R);
}

il void work(){
   m=gi();
   while(m--){
      int op=gi(),u=gi(),v=gi();
      if(op==1) update(rt[deep[u]],1,n,st[u],v);
      else{
         if(deep[u]+v>n){ puts("0"); continue; }
         printf("%d\n",query(rt[deep[u]+v],1,n,st[u],ed[u]));
      }
   }
}

int main(){ init(); work(); return 0; }

[COGS 2551] 新型武器的更多相关文章

  1. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  2. Windows NT 之父 - David Cutler

    David Cutler,大卫·卡特勒,一位传奇程序员,1988年去微软前号称硅谷最牛的内核开发人员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”.他曾供职于杜邦.DEC等公 ...

  3. [转帖]Windows NT 之父 - David Cutler

    Windows NT 之父 - David Cutler https://www.cnblogs.com/wangwust/p/6826200.html 曾经下过 夺路狂奔的电子书 但是还没看完.. ...

  4. 【历史】- Windows NT 之父 - David Cutler

    David Cutler,大卫·卡特勒,一位传奇程序员,1988年去微软前号称硅谷最牛的内核开发人员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”.他曾供职于杜邦.DEC等公 ...

  5. 解读:未来30年新兴科技趋势报告(AI Frist,IoT Second)

    前段时间美国公布的一份长达35页的<未来30年新兴科技趋势报告>.该报告是在美国过去五年内由政府机构.咨询机构.智囊团.科研机构等发表的32份科技趋势相关研究调查报告的基础上提炼形成的. ...

  6. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  7. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...

  8. [转]Redis之七种武器

    长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的七种武器,而本文打算将Redis的几种使用方式 Strings.Hashs.Lists.Sets.Sorted Sets.Pub/Sub ...

  9. 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

    自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

随机推荐

  1. EF Core中如何取消跟踪DbContext中所有被跟踪的实体

    首先定义一个DbContext的扩展类DbContextDetachAllExtension,其中包含一个DbContext的扩展方法DetachAll,用来取消跟踪DbContext中所有被跟踪的实 ...

  2. Python实现随机读取文本N行数据

    工作中需要判断某个文本中的URL是否能正常访问,并且随机获取其中N行能正常访问的URL数据,我的思路是:读取文本每一行数据,用urlopen访问,将返回状态码为200的URL保存到一个列表,获得列表长 ...

  3. 20155304 《网络对抗》Exp9 web安全基础实践

    20155304 <网络对抗>Exp9 web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 攻击原理:web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应 ...

  4. cmake源码包安装后的卸载问题

    cmake源码包安装 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),具体学习请移步官网CMake 本文介绍的就是用cmake去安装的别人的包. 一般流程: ...

  5. 20155339 Exp8 Web基础

    Exp8 Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方 ...

  6. WPF编程,通过Double Animation动态更改控件属性的一种方法。

    原文:WPF编程,通过Double Animation动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/a ...

  7. adr adrl ldr mov总结整理

    ADR这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中.     使用的格式:ADR register,exper.     在编译源程序时,汇编器首先计算出当前PC值( ...

  8. stl源码剖析 详细学习笔记 RB_tree (1)

    // //  RB_tree_STL.cpp //  笔记 // //  Created by fam on 15/3/21. // // #include "RB_tree_STL.h&q ...

  9. SpringBoot日记——缓存的使用

    SpringBoot核心技术的东西基本上都有介绍过了,接下来,进阶点~来说说缓存吧~ 缓存这个词不少同学应该不会很陌生.而我们这里主要使用的就是Redis. 客户端第一次请求的时候是从库里拿出我们需要 ...

  10. C#_Winform_聊天机器人

    最近研究微信公众平台,搭建了一个微信聊天机器人,调用小黄鸡的公众接口,实现在线和小黄鸡聊天的功能. 接口调用不是很麻烦,不过是php版本,所以研究了一下C#的功能模块, Winfrom版 using ...