bzoj 3212 线段树
裸的线段树
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
type
rec =record
left, right :longint;
sum, lazy :int64;
end; var
n, m :longint;
a :array[..] of int64;
t :array[..] of rec; procedure swap(var a,b:longint);
var
c :longint;
begin
c:=a; a:=b; b:=c;
end; procedure build(x,l,r:longint);
var
mid :longint;
begin
t[x].left:=l; t[x].right:=r;
if l=r then
begin
t[x].sum:=a[l];
exit;
end;
with t[x] do mid:=(l+r)>>;
build(*x,l,mid); build(*x+,mid+,r);
t[x].sum:=(t[*x].sum+t[*x+].sum);
end; procedure change(x,l,r:longint;y:int64);
var
mid :longint;
begin
if t[x].lazy<> then
begin
t[*x].sum:=t[*x].sum+t[x].lazy*(t[*x].right-t[*x].left+);
t[*x].lazy:=t[*x].lazy+t[x].lazy;
t[*x+].sum:=t[*x+].sum+t[x].lazy*(t[*x+].right-t[*x+].left+);
t[*x+].lazy:=t[*x+].lazy+t[x].lazy;
t[x].lazy:=;
end; if (t[x].left=l) and (t[x].right=r) then
begin
t[x].lazy:=y;
t[x].sum:=t[x].sum+y*(t[x].right-t[x].left+);
exit;
end;
with t[x] do mid:=(left+right)>>;
if mid<l then change(*x+,l,r,y) else
if mid>=r then change(*x,l,r,y) else
begin
change(*x,l,mid,y);
change(*x+,mid+,r,y);
end;
t[x].sum:=t[*x].sum+t[*x+].sum;
end; function ask(x,l,r:longint):int64;
var
mid :longint;
begin
if t[x].lazy<> then
begin
t[*x].sum:=t[*x].sum+t[x].lazy*(t[*x].right-t[*x].left+);
t[*x].lazy:=t[*x].lazy+t[x].lazy;
t[*x+].sum:=t[*x+].sum+t[x].lazy*(t[*x+].right-t[*x+].left+);
t[*x+].lazy:=t[*x+].lazy+t[x].lazy;
t[x].lazy:=;
end; if (t[x].left=l) and (t[x].right=r) then exit(t[x].sum); with t[x] do mid:=(left+right)>>;
if mid<l then exit(ask(*x+,l,r)) else
if mid>=r then exit(ask(*x,l,r)) else
exit(ask(*x,l,mid)+ask(*x+,mid+,r));
end; procedure init;
var
i :longint;
begin
readln(n,m);
for i:= to n do read(a[i]);
readln;
build(,,n);
end; procedure main;
var
i :longint;
ch :char;
l, r :longint;
x :int64;
begin
for i:= to m do
begin
read(ch);
if ch='C' then
begin
readln(l,r,x);
if l>r then swap(l,r);
change(,l,r,x);
end else
begin
readln(l,r);
if l>r then swap(l,r);
writeln(ask(,l,r));
end;
end;
end; begin
init;
main;
end.
bzoj 3212 线段树的更多相关文章
- BZOJ 1798 (线段树||分块)的标记合并
我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...
- bzoj 3999 线段树区间提取 有序链剖
看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提 ...
- bzoj 3211 线段树
开方操作最多进行5次就可以把出现的任何数变成1. 所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. /***************************** ...
- bzoj 1018 线段树维护连通性
本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...
- bzoj 2120 线段树套平衡树
先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...
- bzoj 1901 线段树套平衡树+二分答案查询
我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...
- BZOJ 1012 线段树||单调队列
非常裸的线段树 || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...
- BZOJ 3681 线段树合并+网络流
思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...
- BZOJ 4756 线段树合并(线段树)
思路: 1.最裸的线段树合并 2. 我们可以观察到子树求一个东西 那我们直接DFS序好了 入队的时候统计一下有多少比他大的 出的时候统计一下 减一下 搞定~ 线段树合并代码: //By SiriusR ...
随机推荐
- 【数据库】 SQLite 介绍
[数据库] SQLite 介绍 一. 特点 : 小而精悍 1. 轻量级 : 占用资源低 2. 嵌入式 : 无需安装,直接引用就可用 3. 支持 SQL 语法, 大部分兼容 Sql Server 语法, ...
- Android PopupWindow 疑难杂症之宽度WRAP_CONTENT
一直以来都觉得 Android 中的 PopupWindow 不好用.主要有以下两点:1.宽度不好控制2.位置不好控制 今天单说第1点. 由于应用有好几种国家的语言,加上各设备宣染效果不完全一样,对p ...
- inline-block 空隙
IE8-9.Firefox.Safari 是4px Chrome下是8px 出现原因 标签换行引起 解决方案网上很多 但是在布局中尽量避免使用inline-block
- 关于相对布局RelativeLayout的各种属性介绍
RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西. 相 ...
- 12-Mysql数据库----多表查询
本节重点: 多表连接查询 符合条件连接查询 子查询 准备工作:准备两张表,部门表(department).员工表(employee) create table department( id int, ...
- Sersync实时备份服务部署实践
- Markdown常用的几种语法
在VScode上面写的,现将代码粘贴如下:(在VScode里运行下即可) # Markdown语法 # Ctrl + k v 打开侧边预览 ## 一.加粗斜体删除线 **这是要加粗的文字** *这是要 ...
- z 变换
1. z 变换 单位脉冲响应为 \(h[n]\) 的离散时间线性时不变系统对复指数输入 \(z^n\) 的响应 \(y[n]\) 为 \[ \tag{1} y[n] = H(z) z^{n}\] 式中 ...
- ipfs02笔记
IPFS-day02 其他常用操作 添加文件并用文件夹包裹 ipfs add xxx -w 把內容快取到本地,并提供给他人.官网文档 ipfs pin add QmT7TX5vGmFz86V8cDkP ...
- BZOJ 2049 SDOI2008 洞穴勘测 LCT板子
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题意概述:给出N个点,一开始不连通,M次操作,删边加边,保证图是一个森林,询问两点连 ...