codevs 1082 线段树练习3
给你N个数,有两种操作:
1:给区间[a,b]的所有数增加X
2:询问区间[a,b]的数的和。
第一行一个正整数n,接下来n行n个整数,
再接下来一个正整数Q,每行表示操作的个数,
如果第一个数是1,后接3个正整数,
表示在区间[a,b]内每个数增加X,如果是2,
表示操作2询问区间[a,b]的和是多少。
pascal选手请不要使用readln读入
对于每个询问输出一行一个答案
3
1
2
3
2
1 2 3 2
2 2 3
9
数据范围
1<=n<=200000
1<=q<=200000
mlgb ;
a了一个星期终于过了;
运行结果
测试点#ask1.in 结果:AC 内存使用量: 232kB 时间使用量: 1ms
测试点#ask10.in 结果:AC 内存使用量: 13420kB 时间使用量: 399ms
测试点#ask2.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#ask3.in 结果:AC 内存使用量: 6380kB 时间使用量: 32ms
测试点#ask4.in 结果:AC 内存使用量: 6892kB 时间使用量: 176ms
测试点#ask5.in 结果:AC 内存使用量: 6764kB 时间使用量: 177ms
测试点#ask6.in 结果:AC 内存使用量: 13548kB 时间使用量: 365ms
测试点#ask7.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#ask8.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#ask9.in 结果:AC 内存使用量: 6252kB 时间使用量: 27ms
代码
#include<cstdio>
using namespace std; struct node {
int l,r;
long long int dis,flag;
};
struct node tree[];
int n,m,q;
int a,b,x1; void tree_up(int k)
{
tree[k].dis=tree[k*].dis+tree[k*+].dis;
} void tree_build(int k,int l,int r)
{
tree[k].l=l;
tree[k].r=r;
if(l==r)
{
scanf("%lld",&tree[k].dis);
return;
}
int mid=(l+r)/;
tree_build(k*,l,mid);
tree_build(k*+,mid+,r);
tree_up(k);
} void tree_down(int k)
{
if(tree[k].l==tree[k].r)
{
tree[k].flag=;
return;
}
tree[k*].flag+=tree[k].flag;
tree[k*].dis+=(tree[k*].r-tree[k*].l+)*tree[k].flag;
tree[k*+].flag+=tree[k].flag;
tree[k*+].dis+=(tree[k*+].r-tree[k*+].l+)*tree[k].flag;
tree[k].flag=;
} void tree_add(int k,int l,int r,int x)
{
if(tree[k].l==l&&tree[k].r==r)
{
tree[k].flag+=x;
tree[k].dis+=(tree[k].r-tree[k].l+)*x;
tree_down(k);
return ;
}
tree_down(k);
int mid=(tree[k].l+tree[k].r)/;
if(l>mid) tree_add(k*+,l,r,x);
else if(r<=mid) tree_add(k*,l,r,x);
else {
tree_add(k*,l,mid,x);
tree_add(k*+,mid+,r,x);
}
tree_up(k);
} long long int tree_query(int k,int l,int r)
{
tree_down(k);
if(tree[k].l!=tree[k].r) tree_up(k);
if(tree[k].l==l&&tree[k].r==r)
return tree[k].dis;
int mid=(tree[k].l+tree[k].r)/;
if(l>mid) return tree_query(k*+,l,r);
else if(r<=mid) return tree_query(k*,l,r);
else return tree_query(k*,l,mid)+tree_query(k*+,mid+,r);
} int main()
{
scanf("%d",&n);
tree_build(,,n);
scanf("%d",&m);
while(m--)
{
scanf("%d",&q);
switch(q){
case :{
scanf("%d%d%d",&a,&b,&x1);
tree_add(,a,b,x1);
break;
}
case :{
scanf("%d%d",&a,&b);
printf("%lld\n",tree_query(,a,b));
break;
}
}
}
return ;
}
codevs 1082 线段树练习3的更多相关文章
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- Codevs 1082 线段树练习 3
1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Maste 传送门 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的 ...
- 【树状数组区间修改区间求和】codevs 1082 线段树练习 3
http://codevs.cn/problem/1082/ [AC] #include<bits/stdc++.h> using namespace std; typedef long ...
- codevs 1082 线段树练习3 (线段树)
题目: 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数 ...
- codevs 1082 线段树练习 3 区间更新+延迟标记
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
- codevs 1082 线段树练习 3 --分块练习
时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[ ...
- codevs 1082 线段树练习3 模板题
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],sum[ ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
随机推荐
- 也来谈谈wap端瀑布流布局
Definition 瀑布流布局,在视觉上表现为参差不齐的多栏布局,随着页面滚动条向下滚动,新数据不断被加载进来. 瀑布流对于图片的展现,是高效而具有吸引力的,用户一眼扫过的快速阅读模式可以在短时间内 ...
- SharePoint 2010 常用技巧及方法总结
1.代码调试确定进程cd c:\windows\system32\inetsrvappcmd list wppause注:保存成批处理文件,查看进程.bat,用的时候双击即可 2.类似列表新建打开方式 ...
- VMware Data Recovery备份恢复vmware虚拟机
VMware Data Recovery 是VMware虚拟机备份工具,可创建虚拟机备份,同时不会中断虚拟机的使用或虚拟机提供的数据和服务.Data Recovery 管理现有备份,并在这些备份过时后 ...
- MojoDatabase 源码学习之对象映射
Mojo-database是我个人比较喜欢多开源项目,下文是该项目打介绍和地址: mojo-database 简介: MojoDatabase is an ActiveRecord-like ORM ...
- 在Window 下安装Redis数据库
小Alan国庆后就要回深圳找工作了,最近在复习工作所需的相关的技术,今天刚好复习到redis,redis是一个非关系型(NoSql)数据库,采用key-value的方式存储数据,她可以保存字符串(St ...
- android Gui系统之SurfaceFlinger(1)---SurfaceFlinger概论
GUI 是任何系统都很重要的一块. android GUI大体分为4大块. 1)SurfaceFlinger 2)WMS 3)View机制 4)InputMethod 这块内容非常之多,但是理解后,可 ...
- 转换Excel表格到MarkDown:exceltk
源码和下载: 源码:https://github.com/fanfeilong/exceltk 下载:http://files.cnblogs.com/files/math/exceltk0.0.9. ...
- ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl
ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库 源码下载Maticsoft.DBUtility.dll 数据访问类库组件 源码下载LtpPageC ...
- Spring CharacterEncodingFilter
<!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name>springUtf8Encoding</fi ...
- C# 读取在存储过程多结果集
--SQL Server 测试环境搭建: Create database Test; go USE [Test] GO if OBJECT_ID('Tab','U') is not null drop ...