线段树(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] ...
随机推荐
- c# winform插件
插件接口 namespace IMsg { ///<summary> /// 这是插件必须实现的接口,也是主程序与插件通信的唯一接口 /// 换句话说,主程序只认识插件里的这些方法 /// ...
- Python序列化之json与pickle
1.json介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...
- 关于SUID、SGID、Sticky
SUID属性 passwd命令可以用于更改用户的密码,一般用户可以使用这个命令修改自己的密码.但是保存用户密码的/etc/shadow文件的权限是400,也就是说只有文件的所有者root用户可以写入, ...
- Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表
Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 一个个人觉得比较简单小巧的软件. 下面就如何编写如何发布打包来介绍一下吧! 先下载mysql的库文件链接:http://files. ...
- Token Based Authentication in Web API 2
原文地址:http://www.c-sharpcorner.com/uploadfile/736ca4/token-based-authentication-in-web-api-2/ Introdu ...
- 零拷贝传输(zero-copy transfer)——sendfile()
做Web服务器时通常需要将文件传送出去,其中一种方法是通过定义一个buffer每次读取文件发送给接收端.大多数服务器会选择sendfile的方式,nginx实现时就是采用这种方式.对于并发搞得服务器性 ...
- TopCoder SRM 639 Div.2 500 AliceGameEasy --乱搞
题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数. 解法: 这题是我傻逼了,处理上各种不优越,要使n*( ...
- CF 676B Pyramid of Glasses[模拟]
B. Pyramid of Glasses time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ4152The Captain[DIjkstra]
4152: [AMPPZ2014]The Captain Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 700 Solved: 266[Submit ...
- VS使用Sublime Text 主题
VS主题需求 VS默认有三种主题Dark,Light,Blue,但你是否想寻找其它的主题呢?本文介绍两种方法来满足你的不同需求 1.微软官方扩展 微软官方推出的 Visaul Studio Color ...