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. SQL Server开发接口生成方法

    为提高开发效率,生成固定格式的接口是必须的,以下以提供新增/修改/删除/读取接口为例: 以常见的表结构为例,特殊表结构可自己尝试去调整方法 主要通过系视图 sys.columns生成方法:为包含列的对 ...

  2. ZooKeeper之ZAB协议

    ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法,ZAB(ZooKeeper Atomic Broa ...

  3. ps, top, pstree

    ps 查看当前终端所启动的进程, 不加选项只查看当前终端的进程 PID TTY TIME CMD 2398 pts/1 00:00:00 bash 3625 pts/1 00:00:00 ps #PI ...

  4. mysql优化之索引篇

    对mysql优化是一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平 ...

  5. STM32的USART

    转载自:http://www.cnblogs.com/TrueElement/archive/2012/09/14/2684298.html 几个问题: 1.状态寄存器(USART_SR)中的TC(T ...

  6. 网络错误定位案例 ICMP host *** unreachable - admin prohibited

    1. 环境 一台物理服务器 9.115.251.86,上面创建两个虚机,每个虚机两个网卡: vm1:eth0 - 9.*.*.232 eth1:10.0.0.14 vm2: eth0 - 9.8.*. ...

  7. 周一干不干活-PHP+MySQLi

    hi 本来是雄心壮志的要干活的,哪知天有不测,早上大阴天起不来,中午又回寝室折腾衣服(做女工啊,牛不牛)没睡午觉,这样的迷糊状态,怎么科研,写这个好了. 1.PHP的OOP编程 4.7 多态 --定义 ...

  8. [Computer structure] Written Notes

    To some extent, taking notes using my pen and pencil is also an interesting thing! bingo! ~ 2016-03- ...

  9. POJ1270 Following Orders[拓扑排序所有方案 Kahn]

    Following Orders Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4885   Accepted: 1973 ...

  10. Unity Shader IDE — Sublime Text2

    使用MonoDevelop写了一段时间的Shader代码,发现效率太低了,所以换用Sublime Text. 安装Sublime Text 1.下载 sublime Text2 官网:http://w ...