type jd=record
z,y,lc,rc,sum,toadd:int64;
end; var
tree:array[..] of jd;
qzh:array[..] of int64;
x:array[..] of int64;
n,m,a,b,k,ans,tot,t:int64;
i,j:longint; function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; procedure maketree(a,b:longint);
var
mid,t:longint;
begin
inc(tot);
t:=tot;
tree[t].z:=a;tree[t].y:=b;
tree[t].sum:=qzh[b]-qzh[a-];
mid:=(a+b) div ;
if a<b then
begin
tree[t].lc:=tot+;
maketree(a,mid);
tree[t].rc:=tot+;
maketree(mid+,b);
end;
end; procedure add(po,a,b,k:longint);
var
mid:longint;
begin
mid:=(tree[po].z+tree[po].y) div ; tree[po].sum:=tree[po].sum+k*(min(b,tree[po].y)-max(a,tree[po].z)+)+tree[po].toadd*(tree[po].y-tree[po].z+); if tree[po].toadd<> then
begin
tree[tree[po].lc].toadd:=tree[tree[po].lc].toadd+tree[po].toadd;
tree[tree[po].rc].toadd:=tree[tree[po].rc].toadd+tree[po].toadd;
tree[po].toadd:=;
end; if (a=tree[po].z)and(b=tree[po].y) then
begin
tree[tree[po].lc].toadd:=tree[tree[po].lc].toadd+k;
tree[tree[po].rc].toadd:=tree[tree[po].rc].toadd+k;
end else
begin
if a<=mid then add(tree[po].lc,a,min(b,mid),k);
if b>mid then add(tree[po].rc,max(a,mid+),b,k);
end;
end; procedure getans(po,a,b:longint);
var
mid:longint;
begin
if tree[po].toadd<> then
begin
tree[po].sum:=tree[po].sum+tree[po].toadd*(tree[po].y-tree[po].z+);
tree[tree[po].lc].toadd:=tree[tree[po].lc].toadd+tree[po].toadd;
tree[tree[po].rc].toadd:=tree[tree[po].rc].toadd+tree[po].toadd;
tree[po].toadd:=;
end; mid:=(tree[po].z+tree[po].y) div ;
if (a=tree[po].z) and (b=tree[po].y) then
ans:=ans+tree[po].sum else
begin
if a<=mid then getans(tree[po].lc,a,min(b,mid));
if b>mid then getans(tree[po].rc,max(a,mid+),b);
end;
end; begin readln(n);
for i:= to n do
begin
read(x[i]);
qzh[i]:=qzh[i-]+x[i];
end; maketree(,n); read(m);
for i:= to m do
begin
read(t);
if t= then
begin
read(a,b,k);
add(,a,b,k);
end;
if t= then
begin
read(a,b);
ans:=;
getans(,a,b);
writeln(ans);
end;
end; end.

线段树(codevs1082)的更多相关文章

  1. Codevs1082 线段树练习 3

    题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...

  2. 线段树[To be continued]

    目录 数据结构--线段树 一.定义 二.性质 三.基本操作 0.结构体 1.建树 2.单点查询 3.单点修改 4.区间修改 5.区间查询 四.题目 单点修改.区域查询模板 五.鸣谢 学姐的Blog 百 ...

  3. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  4. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  5. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  6. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  7. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  8. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  9. CF719E(线段树+矩阵快速幂)

    题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...

  10. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

随机推荐

  1. MySQL入门(三)

    写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想 ...

  2. iOS tabbar 自定义小红点 消息显示,定制边框、颜色、高宽

    一般我们需要显示消息数,会利用到系统提供的api UIApplication.sharedApplication().applicationIconBadgeNumber = 10 但如果我们不想显示 ...

  3. x01.os.1: BIOS 中断

    这只是一点准备工作.为了显示字符串,需要调用中断:int  0x10 (AH=0x13).具体参数设置,参考我的归纳整理如下: INT 10 (AH = 0) -----------------功能: ...

  4. C#编程普通型计算器 经验与感悟

    先贴图: 这是用C# 语言编写的普通型计算器,功能基本模仿Windows8自带计算器程序(版本6.3,内部版本9600).支持加.减.乘.除.退格.清除.平方根.倒数.相反数.连续四则.连续等号.自动 ...

  5. php 批量更新某字段内容的部分内容 replace(要替换的字段,'被替换的字符串,'替换成的字符串')

    要求: 一个字段值: ------预约---- 要将其中 "预约",改成"预定". 但是我开始写的时候,写成了 update 表名 set smscontent ...

  6. Windows Azure Redis 缓存服务

    8月20日,Windows Azure (中国版)开始提供Redis缓存服务,比较国际版的Microsoft Azure晚了差不多一年的时间.说实话,微软真不应该将这个重要的功能delay这么长时间, ...

  7. java基础算法之冒泡排序

    接触冒泡算法还是大一了,学习C语言的冒泡算法.现在唯一记得就是冒泡与选择了.出来刚刚工作的时候觉的算法基本没撒用处,现在发现这些都是很好的基础.因此自己也准备重新拾起这些知识. 冒泡排序 泡排序是一种 ...

  8. AC日记——数1的个数 openjudge 1.5 40

    40:数1的个数 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数. 例如当n=2时,写下1,2. ...

  9. Unity Ragdoll(布娃娃系统)

    逼真的动作如何实现的? 在一些游戏中当NPC或玩家死亡的时候,死亡的肢体动作十分逼真,这一物理现象如何用Unity来实现呢?Unity物理引擎中的Ragdoll系统,可以用来创建这种效果,具体请参阅以 ...

  10. gnuplot 的安装

    需要同时安装gnuplot和gnuplot-x11才能画出图 sudo apt-get install gnuplot gnuplot-x11 gnuplot not showing the grap ...