线段树(codevs1082)
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)的更多相关文章
- Codevs1082 线段树练习 3
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
- 线段树[To be continued]
目录 数据结构--线段树 一.定义 二.性质 三.基本操作 0.结构体 1.建树 2.单点查询 3.单点修改 4.区间修改 5.区间查询 四.题目 单点修改.区域查询模板 五.鸣谢 学姐的Blog 百 ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
随机推荐
- Iframe指定页面,并使其与该页面显示一致
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- mysql学习笔记(一)
my建表操作 创建表 create Table <表名> ( 字段名1,数据类型 [列级约束] [默认值], 字段名2,数据类型 [列级约束] [默认值], ... [表级约束], [co ...
- ES6块级作用域及新变量声明(let)
很多语言中都有块级作用域,但JS没有,它使用var声明变量,以function来划分作用域,大括号“{}” 却限定不了var的作用域.用var声明的变量具有变量提升(declaration hoist ...
- 解决内网主机ping不通网关能ping内网
有一台笔记本电脑可以自动获取IP,可以和内网其他主机互相PING通,就是PING 不通网关,只能上内网,不能上外网,IP换到其他主机上也可以上外网,说明路由器上没什么限制.路由器也查了,电脑也重装了, ...
- python字符串/元组/列表/字典互转
#-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ' ...
- SQLServer中比较末尾带有空格的字符串遇到的坑
最近发现SQLServer中比较字符串的时候 如果字符串末尾是空格 那么SQLServer会无视那些空格直接进行比较 这和程序中平时的字符串判断逻辑不统一 );set @a=N'happycat198 ...
- Buffer Overflow Study
-- These days I learned and studied buffer overflow. I like to write on the paper and it can keep sy ...
- copy-paste component
http://www.cnblogs.com/wantnon/p/4579008.html
- 基于tiny6410的madplay播放器的移植
在移植madplay之前需要先将所需要的库移植到开发板的文件系统中. 现在每个解压后的文件夹中创建一个文件夹 zlib-1.1.4.tar.gz 解压:tar xvzf zlib-1.1.4.tar ...
- Eclipse仿Visual AssistX 编辑着色插件
1. 风格下载 http://www.eclipsecolorthemes.org/?view=theme&id=4602 2. 风格的安装与卸载 http://www.cnblogs.com ...