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



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

  1. //made by Hero_of_Someone
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #define inf (1<<30)
  6. #define N (600010)
  7. #define il inline
  8. #define RG register
  9. using namespace std;
  10. il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();
  11. if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }
  12. int n,m,deep[N],w[N],st[N],ed[N],tim;
  13. int rt[N],sum[N<<2],ls[N<<2],rs[N<<2],cnt;
  14. int num,head[N],nxt[N<<1],to[N<<1];
  15. il void add(int u,int v){
  16. nxt[++num]=head[u];to[num]=v;head[u]=num;
  17. nxt[++num]=head[v];to[num]=u;head[v]=num;
  18. }
  19. il void dfs(int x,int f){
  20. st[x]=++tim;
  21. deep[x]=deep[f]+1;
  22. for(int i=head[x];i;i=nxt[i]){
  23. int v=to[i]; if(v==f) continue;
  24. dfs(v,x);
  25. }
  26. ed[x]=tim;
  27. }
  28. il void update(int &x,int l,int r,int k,int val){
  29. if(!x) x=++cnt;
  30. if(l==r){ sum[x]=val; return ; }
  31. RG int mid=(l+r)>>1;
  32. if(k<=mid) update(ls[x],l,mid,k,val);
  33. else update(rs[x],mid+1,r,k,val);
  34. sum[x]=sum[ls[x]]+sum[rs[x]];
  35. }
  36. il void init(){
  37. n=gi();
  38. for(int i=1;i<=n;i++) w[i]=gi();
  39. for(int i=1;i<n;i++){
  40. int u=gi(),v=gi();
  41. add(u,v);
  42. }
  43. dfs(1,0);
  44. for(int i=1;i<=n;i++)
  45. update(rt[deep[i]],1,n,st[i],w[i]);
  46. }
  47. il int query(int x,int l,int r,int L,int R){
  48. if(!x) return 0;
  49. if(L==l && r==R) return sum[x];
  50. int mid=(l+r)>>1,ret=0;
  51. if(R<=mid) return query(ls[x],l,mid,L,R);
  52. else if(L>mid) ret+=query(rs[x],mid+1,r,L,R);
  53. else return query(ls[x],l,mid,L,mid)+query(rs[x],mid+1,r,mid+1,R);
  54. }
  55. il void work(){
  56. m=gi();
  57. while(m--){
  58. int op=gi(),u=gi(),v=gi();
  59. if(op==1) update(rt[deep[u]],1,n,st[u],v);
  60. else{
  61. if(deep[u]+v>n){ puts("0"); continue; }
  62. printf("%d\n",query(rt[deep[u]+v],1,n,st[u],ed[u]));
  63. }
  64. }
  65. }
  66. 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. ZOJ3623:Battle Ships(全然背包)

    Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a defense ...

  2. iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK

    iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言:    今天给大家 ...

  3. 20155220 《网络对抗》Exp 8 Web基础

    20155220 <网络对抗>Exp 8 Web基础 基础问题回答 实践内容 1.Web前端HTML 配置环境 正常安装.启动Apache 安装:sudo apt-get install ...

  4. Codeforces 954C Matrix Walk (思维)

    题目链接:Matrix Walk 题意:设有一个N×M的矩阵,矩阵每个格子都有从1-n×m的一个特定的数,具体数的排列如图所示.假设一个人每次只能在这个矩阵上的四个方向移动一格(上下左右),给出一条移 ...

  5. 微信小程序之自定义组件的应用

    小程序支持自定义组件,下面是一个简单的购物车组件,实现的效果如图: 效果图 创建组件 在根目录创建components目录,然后创建计数组件 count 如图: 组件内容 <!--compone ...

  6. Elasticsearch Java Rest Client API 整理总结 (一)——Document API

    目录 引言 概述 High REST Client 起步 兼容性 Java Doc 地址 Maven 配置 依赖 初始化 文档 API Index API GET API Exists API Del ...

  7. SQL 追踪

    SQL追踪(SQL Trace)是一个轻量级的追踪工具,按照事件(Events)记录数据库发生的消息,几乎对数据库性能没有什么影响.SQL Server内置一个Trace,称作默认追踪(Default ...

  8. 12、利用docker快速搭建Wordpress网站

    一.准备工作 结构图: 用户访问页面,Nginx将请求进行转发,如果请求的是php页面,则通过FastCGI转发给后端php进行处理:如果非php页面,则直接返回静态页面. 关键点: mysql.ph ...

  9. css小技巧::not()选择器的妙用

    比如,要实现下面的效果(例如:一个列表的最后一项没有边框): See the Pen gmrGOV by 杨友存 (@Gavin-YYC) on CodePen. 一般的文档结构如下: <!-- ...

  10. 揭秘memset与sizeof的结合使用方法

    memset与sizeof为什么经常结合起来用呢? 一.memset介绍 memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数. 基本用法: void * ...