http://www.elijahqi.win/archives/3696
Description
“奋战三星期,造台计算机”。小G响应号召,花了三小时造了台普通计算姬。普通计算姬比普通计算机要厉害一些
。普通计算机能计算数列区间和,而普通计算姬能计算树中子树和。更具体地,小G的计算姬可以解决这么个问题
:给定一棵n个节点的带权树,节点编号为1到n,以root为根,设sum[p]表示以点p为根的这棵子树中所有节点的权
值和。计算姬支持下列两种操作:
1 给定两个整数u,v,修改点u的权值为v。
2 给定两个整数l,r,计算sum[l]+sum[l+1]+….+sum[r-1]+sum[r]
尽管计算姬可以很快完成这个问题,可是小G并不知道它的答案是否正确,你能帮助他吗?

Input
第一行两个整数n,m,表示树的节点数与操作次数。
接下来一行n个整数,第i个整数di表示点i的初始权值。
接下来n行每行两个整数ai,bi,表示一条树上的边,若ai=0则说明bi是根。
接下来m行每行三个整数,第一个整数op表示操作类型。
若op=1则接下来两个整数u,v表示将点u的权值修改为v。
若op=2则接下来两个整数l,r表示询问。
N<=10^5,M<=10^5
0<=Di,V<2^31,1<=L<=R<=N,1<=U<=N

Output
对每个操作类型2输出一行一个整数表示答案。

Sample Input
6 4
0 0 3 4 0 1
0 1
1 2
2 3
2 4
3 5
5 6
2 1 2
1 1 1
2 3 6
2 3 5
Sample Output
16
10
9
HINT

Source
按照序列分块 1~n设f[i][x]表示如果修改了x 会对i块产生几次的影响

然后建立dfs序 用树状数组维护子树和

查询的时候 sqrt(n)*log(n)

修改的时候log(n)+sqrt(n)

#include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
#define ll unsigned long long
using namespace std;
inline char gc(){static char now[1<<16],*S,*T;if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}return *S++;
}
inline int read(){int x=0,f=1;char ch=gc();while(!isdigit(ch)) {if (ch=='-') f=-1;ch=gc();}while(isdigit(ch)) x=x*10+ch-'0',ch=gc();return x*f;
}
const int N=1e5+10;
struct node{int y,next;
}data[N<<1];
ll s[N],sum[N],size[N];
int h[N],n,m,nn,in[N],out[N],st[375],f[N][375],num,a[N],bl[N],rt,nm;
inline void add(int x,ll v){while(x<=n) s[x]+=v,x+=x&-x;
}
inline ll query(int x){static ll tmp;tmp=0;while(x) tmp+=s[x],x-=x&-x;return tmp;
}
inline void dfs(int x,int fa){++st[bl[x]];in[x]=++num;add(in[x],a[x]);size[x]=a[x];for (int i=1;i<=nm;++i) f[x][i]=st[i];for (int i=h[x];i;i=data[i].next){int y=data[i].y;if (y==fa) continue;dfs(y,x);size[x]+=size[y];}out[x]=num;--st[bl[x]];sum[bl[x]]+=size[x];
}
int main(){freopen("bzoj4765.in","r",stdin);n=read();m=read();nn=sqrt(n);nm=(n-1)/nn+1;for (int i=1;i<=n;++i) a[i]=read();for (int i=1;i<=n;++i) bl[i]=(i-1)/nn+1;for (int i=1;i<=n;++i){int x=read(),y=read();if (!x) {rt=y;continue;}data[++num].y=y;data[num].next=h[x];h[x]=num;data[++num].y=x;data[num].next=h[y];h[y]=num;}num=0;dfs(rt,0);for (int owo=1;owo<=m;++owo){int op=read(),x=read(),y=read();if (op==1){for (int i=1;i<=nm;++i) sum[i]+=(ll)f[x][i]*(y-a[x]);add(in[x],y-a[x]);a[x]=y;}else{ll ans=0;if (bl[x]==bl[y]){for (int i=x;i<=y;++i) ans+=query(out[i])-query(in[i]-1);printf("%llu\n",ans);}else{for (int i=bl[x]+1;i<bl[y];++i) ans+=sum[i];for (int i=x;bl[i]==bl[x];++i) ans+=query(out[i])-query(in[i]-1);for (int i=y;bl[i]==bl[y];--i) ans+=query(out[i])-query(in[i]-1);printf("%llu\n",ans);}}}return 0;
}

bzoj 4765 普通计算姬相关推荐

  1. bzoj 4765: 普通计算姬(分块+树状数组)

    4765: 普通计算姬 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 1481  Solved: 318 [Submit][Status][Disc ...

  2. bzoj 4765: 普通计算姬

    Description "奋战三星期,造台计算机".小G响应号召,花了三小时造了台普通计算姬.普通计算姬比普通计算机要厉害一些 .普通计算机能计算数列区间和,而普通计算姬能计算树中 ...

  3. BZOJ4765 普通计算姬

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. BZOJ4766: 文艺计算姬

    Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 737  Solved: 402 [Submit][Status][Discuss] Descripti ...

  5. [BZOJ4766]文艺计算姬

    [BZOJ4766]文艺计算姬 试题描述 "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞.普通计算机能计算一个带标号完 ...

  6. Bzoj4766 文艺计算姬

    Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 234  Solved: 142 Description "奋战三星期,造台计算机" ...

  7. 省选专练之文艺计算姬

    "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬. 文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一 ...

  8. linux 传输大文件大小,Linux大文件传输(转)

    我们经常需要在机器之间传输文件.比如备份,复制数据等等.这个是很常见,也是很简单的.用scp或者rsync就能很好的完成任务.但是如果文件很大,需要占用一些传输时间的时候,怎样又快又好地完成任务就很重 ...

  9. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

最新文章

  1. android 跳转到应用市场
  2. 一个浙江商人立下的22条规矩
  3. 2018 icpc 徐州现场赛G-树上差分+组合数学-大佬的代码
  4. python正态检验_Python怎么检验数据的正态分布
  5. percona+mysql插件_使用percona mysql插件来监控mysql5.7
  6. 万字综述之生成对抗网络(GAN)
  7. android md 控件,Android基本UI控件.md
  8. 被LCD调戏睡不着了
  9. Linux工作笔记-使用SCP文件协议(SSH协议22端口)使Windows与Linux互传文件
  10. php no route to host,java.net.NoRouteToHostException: No route to host解决方法
  11. VirtualBox扩容失败-Progress state: VBOX_E_NOT_SUPPORTED
  12. word 转 PDF时报错
  13. MVC四大筛选器—ActionFilterResultedFilter
  14. 【带权并查集题目汇总】
  15. 第十五章 项目收尾与验收
  16. 怎么用spss做冗余分析_利用SPSS进行相关分析(第八章)概述.ppt
  17. iOS 系统分享功能
  18. android 进入recovery,安卓手机如何进入Recovery模式的通用方式详解
  19. 计算机临时保存信息,Windows临时文件夹是什么,Windows临时文件夹保存位置在哪里?...
  20. 文本识别综述 <软件学报_王建新等、中国图象图形学报_刘崇宇等>

热门文章

  1. 服务器显示内存错误怎么办,服务器怎么查看内存故障
  2. java加锁与同步方法
  3. 利用TabNet进行股票长线预测
  4. ADC前BUFFER(跟随器)作用
  5. ios开发 c语言打包.a文件,【转】IOS静态库a文件制作流程
  6. 关于近期工作中遇到的各种问题总结
  7. 大象装企营销:16个月,血亏300万,投资人撤资,公司倒闭
  8. Android问题解决-部分机型上传图片失败
  9. python中删除list中某指定元素
  10. 整理的一篇iOS面试题大全