2018年全国多校算法寒假训练营练习比赛(第五场)H Tree Recovery
Tree Recovery
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述:进行区间求和,区间加减(线段树加懒惰标记)
输入
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
输出
4
55
9
15
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = +;
long long a[maxn];
struct node
{
long long l,r;
long long date,add;
} T[maxn*];
long long n,m;
long long ans=;
void build(long long v,long long l,long long r)
{
T[v].l=l,T[v].r=r;
if(l==r)
{
T[v].date=a[l];
return ;
}
long long mid = (l+r)>>;
build(v<<,l,mid);
build(v<<|,mid+,r);
T[v].date=T[v<<].date+T[v<<|].date;
}
void add(long long v,long long l,long long r,long long value)
{
T[v].date+=(r-l+)*value;
if(T[v].l==l&&T[v].r==r)
{
T[v].add+=value;
return ;
}
if(T[v].add)
{
T[v<<].date+=(T[v<<].r-T[v<<].l+)*T[v].add;
T[v<<|].date+=(T[v<<|].r-T[v<<|].l+)*T[v].add;
T[v<<].add+=T[v].add;
T[v<<|].add+=T[v].add;
T[v].add=;
}
long long mid=(T[v].l+T[v].r)>>;
if(r<=mid)
{
add(v<<,l,r,value);
}
else
{
if(l>mid)
{
add(v<<|,l,r,value);
}
else
{
add(v<<,l,mid,value);
add(v<<|,mid+,r,value);
}
}
}
void query(long long v,long long l,long long r)
{
if(T[v].l==l&&T[v].r==r)
{
ans+=T[v].date;
return ;
}
if(T[v].add)
{
T[v<<].date+=(T[v<<].r-T[v<<].l+)*T[v].add;
T[v<<|].date+=(T[v<<|].r-T[v<<|].l+)*T[v].add;
T[v<<].add+=T[v].add;
T[v<<|].add+=T[v].add;
T[v].add=;
}
long long mid = (T[v].l+T[v].r)>>;
if(r<=mid)
{
query(v<<,l,r);
}
else
{
if(l>mid)
query(v<<|,l,r);
else
{
query(v<<,l,mid);
query(v<<|,mid+,r);
}
}
}
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=; i<=n; i++)scanf("%lld",&a[i]);
build(,,n);
while(m--)
{
char s[];
long long x,y,z;
scanf("%s",s);
if(s[]=='Q')
{
scanf("%lld%lld",&x,&y);
ans=;
query(,x,y);
printf("%lld\n",ans);
}
else
{
scanf("%lld%lld%lld",&x,&y,&z);
add(,x,y,z);
}
}
return ;
}
2018年全国多校算法寒假训练营练习比赛(第五场)H Tree Recovery的更多相关文章
- 【2018年全国多校算法寒假训练营练习比赛(第五场)-E】情人节的电灯泡(二维树状数组单点更新+区间查询)
试题链接:https://www.nowcoder.com/acm/contest/77/E 题目描述 情人节到了,小芳和小明手牵手,打算过一个完美的情人节,但是小刚偏偏也来了,当了一个明晃晃的电灯泡 ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)闯关的lulu
闯关的lulu 链接:https://www.nowcoder.com/acm/contest/67/J 来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每 ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)D N阶汉诺塔变形
https://www.nowcoder.com/acm/contest/67/D 思路: 先手动模拟一下过程,以下是模拟过程,按顺序表示第几步需要移动的盘标号 1 1 2 1 1 2 1 1 3 1 ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)E 恋与程序员
https://www.nowcoder.com/acm/contest/67/E 思路: dfs 代码: #include<bits/stdc++.h> using namespace ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈
https://www.nowcoder.com/acm/contest/67/G 思路: 分形. 记录中间左边点的坐标,然后推出另外3个点的坐标,递归到最简单的情况. 代码: #include< ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)C 六子冲
https://www.nowcoder.com/acm/contest/67/C 思路: 模拟. 代码: #include<bits/stdc++.h> using namespace ...
- 2018年全国多校算法寒假训练营练习比赛(第二场)B - TaoTao要吃鸡
链接:https://www.nowcoder.com/acm/contest/74/B来源:牛客网 题目描述 Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了, 和绝地求 ...
- 2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁
链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀 ...
- 2018年全国多校算法寒假训练营练习比赛(第一场)J - 闯关的lulu
链接:https://www.nowcoder.com/acm/contest/67/J来源:牛客网 题目描述 勇者lulu某天进入了一个高度10,000,000层的闯关塔,在塔里每到一层楼,他都会获 ...
- 吐泡泡(2018年全国多校算法寒假训练营练习比赛(第二场)+栈模拟)+Plug-in(codeforces81A+栈模拟)
吐泡泡题目链接:https://www.nowcoder.com/acm/contest/74/A 题目: 思路: 这种题目当初卡了我很久,今天早训时遇到一个一样得题,一眼就想到用栈模拟,就又回来把这 ...
随机推荐
- centos6.5-7编译安装Ansible详细部署
一.基础介绍==========================================================================================ansi ...
- Rust生命周期bound用于泛型的引用
在实际编程中,可能会出现泛型引用这种情况,我们会编写如下的代码: struct Inner<'a, T> { data: &'a T, } 会产生编译错误: error[E0309 ...
- windows server 2008 R2中建立ftp站点
在windows server 2008 R2中建立ftp站点,要遵循以下步骤: (1) 开启IIS中的ftp服务: (2) 在IIS中建立ftp站点. 具体过程如下: (1) 开启IIS中的ftp服 ...
- [nghttp2]压测工具,源码编译并进行deb打包过程
编译环境:deepin 15.11桌面版 nghttp2下载地址:https://github.com/nghttp2/nghttp2 环境要求 emm只能在类Linux环境才能完整编译,想在Wind ...
- 1和new Number(1)有什么区别
1和new Number(1)有什么区别 author: @Tiffanysbear 总结,两者的区别就是原始类型和包装对象的区别. 什么是包装对象 对象Number.String.Boolean分别 ...
- Spark 系列(三)—— 弹性式数据集RDDs
一.RDD简介 RDD 全称为 Resilient Distributed Datasets,是 Spark 最基本的数据抽象,它是只读的.分区记录的集合,支持并行操作,可以由外部数据集或其他 RDD ...
- 转载 | CSS实现单行、多行文本溢出显示省略号(…)
本文引自:https://www.cnblogs.com/wyaocn/p/5830364.html 首先,要知道css的三条属性. overflow:hidden; //超出的文本隐藏 text-o ...
- Chrome 开发工具之 Memory
开发过程中难免会遇到内存问题,emmm... 本文主要记录一下Chrome排查内存问题的面板,官网也有,但有些说明和例子跟不上新的版本了,也不够详细... !!! 多图预警!!! 简单的内存 ...
- redhat linux 5.3安装activeMQ
安装环境:linux redhat enterprise 5.3 activemq版本:5.9.01.从http://activemq.apache.org/download.html地址下载apac ...
- XML简单了解一下
XML是一种纯文本文档.HTML,标记是已经被W3C规定好的,自己创建一个标签是不被允许的. XML现在的用途是用来存储数据.config文件就是个XML文档.XML是可以自定义的. 每一个XML文档 ...