线段树区间求和
来源:互联网 发布:java kafka offset 编辑:程序博客网 时间:2024/05/16 18:41
题目:点击打开链接
代码:
program pro;var tree:array[0..400000]of record a,b,l,r,lz:longint; sum:int64; end; nn:array[0..200000]of longint; n,m,order,a,b,c,tot,i,j:longint;procedure maketree(l,r:longint);var mid,now:longint;begin inc(tot); now:=tot; tree[now].a:=l; tree[now].b:=r; if l=r then begin tree[now].sum:=nn[l]; exit; end; mid:=(l+r)shr 1; tree[now].l:=tot+1; maketree(l,mid); tree[now].r:=tot+1; maketree(mid+1,r); tree[now].sum:=tree[tree[now].l].sum+tree[tree[now].r].sum;end;procedure gx(num:longint);begin with tree[num] do begin inc(tree[l].lz,lz); inc(tree[r].lz,lz); inc(tree[l].sum,(tree[l].b-tree[l].a+1)*lz); inc(tree[r].sum,(tree[r].b-tree[r].a+1)*lz); lz:=0; end;end;procedure add(num,l,r,c:longint);var mid:int64;begin if tree[num].lz<>0 then gx(num); if (l<=tree[num].a)and(tree[num].b<=r) then begin inc(tree[num].lz,c); inc(tree[num].sum,(tree[num].b-tree[num].a+1)*c); exit; end; mid:=(tree[num].a+tree[num].b)shr 1; if l<=mid then add(tree[num].l,l,r,c); if r>mid then add(tree[num].r,l,r,c); tree[num].sum:=tree[tree[num].l].sum+tree[tree[num].r].sum;end;function find(num,l,r:longint):int64;var mid,ans:int64;begin if tree[num].lz<>0 then gx(num); if (l<=tree[num].a)and(tree[num].b<=r) then exit(tree[num].sum); ans:=0; mid:=(tree[num].a+tree[num].b)shr 1; if l<=mid then inc(ans,find(tree[num].l,l,r)); if r>mid then inc(ans,find(tree[num].r,l,r)); exit(ans);end;beginassign(input,'xds_sum.in'); reset(input);assign(output,'xds_sum.out'); rewrite(output); readln(n); for i:=1 to n do read(nn[i]); tot:=0; maketree(1,n); readln(m); for i:=1 to m do begin read(order); if order=1 then begin readln(a,b,c); add(1,a,b,c); end else begin readln(a,b); writeln(find(1,a,b)); end; end;close(input);close(output);end.
0 0
- 线段树区间求和
- poj3468(线段树区间求和)
- poj3468 线段树区间求和
- 线段树区间更新+求和
- 线段树(区间修改,区间求和)
- poj3468 线段树区间更新,区间求和
- codevs1080 线段树(区间修改+区间求和
- 线段树+区间xor+区间求和
- 【线段树】区间求和+区间修改(区间加)
- HDU 1166(线段树,区间求和)
- poj 3468(线段树应用:区间求和)
- hdu3874/hdu3333 线段树区间求和
- hdu1698(线段树染色区间求和)
- HDU1698(线段树区间更新求和)
- 线段树(区间更新求和)
- 线段树(单点更新,区间求和)
- 线段树 (区间更新求和)
- poj2352Stars【线段树单点更新区间求和】
- Android图片处理相关资料
- 四川大学线下编程比赛第一题:数字填充
- vsftpd 设置用户目录
- Xamarin.iOS故事板(Storyboard)使用_传值与视图切换效果
- PDF格式转换器绿色版下载
- 线段树区间求和
- android 项目工程中 values values-11 values-14 区别
- c#生成指定后缀名的临时文件
- Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案
- 面试题---2014.3.29阿里巴巴实习生招聘-研发工程师笔试题
- 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)
- 企业IT运维综合管理系统(CooCare Enterprise Edition V1.0)白皮书
- 学习安卓开发的兴奋与郁闷
- 2014鞍山现场赛H题HDU5077(DFS减枝+打表)