裸的线段树

/**************************************************************
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 线段树的更多相关文章

  1. BZOJ 1798 (线段树||分块)的标记合并

    我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...

  2. bzoj 3999 线段树区间提取 有序链剖

    看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提 ...

  3. bzoj 3211 线段树

    开方操作最多进行5次就可以把出现的任何数变成1. 所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. /***************************** ...

  4. bzoj 1018 线段树维护连通性

    本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...

  5. bzoj 2120 线段树套平衡树

    先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...

  6. bzoj 1901 线段树套平衡树+二分答案查询

    我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...

  7. BZOJ 1012 线段树||单调队列

    非常裸的线段树  || 单调队列: 假设一个节点在队列中既没有时间优势(早点入队)也没有值优势(值更大),那么显然不管在如何的情况下都不会被选为最大值. 既然它仅仅在末尾选.那么自然能够满足以上的条件 ...

  8. BZOJ 3681 线段树合并+网络流

    思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解 //By SiriusRen #include <bits/stdc++.h&g ...

  9. BZOJ 4756 线段树合并(线段树)

    思路: 1.最裸的线段树合并 2. 我们可以观察到子树求一个东西 那我们直接DFS序好了 入队的时候统计一下有多少比他大的 出的时候统计一下 减一下 搞定~ 线段树合并代码: //By SiriusR ...

随机推荐

  1. Mootools 学习随笔

    简单的介绍下Mootools: MooTools是一个简洁,模块化,面向对象的开源JavaScript web应用框架.在处理js.css.html时候,为web开发者提供了一个跨浏览器的js解决方案 ...

  2. Android当代码方法超过65536个时,在2.3机器上会不能安装,出现INSTALL_FAILED_DEXOPT错误

    今天打包时,发现2.3机器,产生的APK在某些机器上不能安装(Installation error: INSTALL_FAILED_DEXOPT),针对这个问题的一个可能解释是:最新的ADT和SDK ...

  3. python基础训练营04-函数

    任务四  函数的关键字 函数的定义 函数参数与作用域 函数返回值 一.函数的关键字: def 二.函数的定义: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号 ...

  4. ipfs02

    IPFS-day02 其他常用操作 添加文件并用文件夹包裹 ipfs add xxx -w 把內容快取到本地,并提供给他人.官网文档 ipfs pin add QmT7TX5vGmFz86V8cDkP ...

  5. 测试理论--branch testing and boundary testing

    1 branch testing 分支测试 测试代码的所有分支 2 boundary testing 测试 程序的限制条件

  6. Week2 Teamework from Z.XML 软件分析与用户需求调查(四)Bing桌面及助手的现状与发展

    一.Bing搜索的相关背景 第一,必应搜索前几年的发展重点在于欧美市场,并且取得了一定的成效:根据 Hitwise 的统计数据,Bing 在 2011年3 月份市场占有率突破了 30% 大关,达到 3 ...

  7. 将EXCEL表中的数据轻松导入Mysql数据表

    转载自:http://blog.163.com/dielianjun@126/blog/static/164250113201042310181431/ 在网络上有不较多的方法,在此介绍我已经验证的方 ...

  8. hadoop worldcount小程序

    首先在hadoop中建立input文件夹放几个文件,里边写点东西.比如我放了三个,分别写的是 第一个 hello hadoop bye hadoop 第二个 hello world bye world ...

  9. html5实现web app摇一摇换歌

    微信可以摇歌曲,根据声音识别出歌曲,然后返回歌曲信息,利用html5的deviceOrientation特性和deviceMotion事件也可以在web app上实现类似于微信摇一摇的功能,原生的ap ...

  10. elasticsearch 工具类

    <?php /** * Created by PhpStorm. * User: brady * Date: 2018/4/8 * Time: 10:31 * esticsearch helpe ...