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 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
随机推荐
- 利用Canvas实现360度浏览
前言:最近几个月来到新公司,主要从事移动端方面的开发,有时候也挺忙挺累的,于是就好一段时间没写博客了.其实自己在这几个月里,自己对canvas以及createjs和egret都有了一定程度上的认识与掌 ...
- 客户端调用服务端webservice的端口问题
今天有一个同事过来问:他有一个程序在A服务器上调第三方B服务器短信发送服务接口(webservice),无论是否发送成功,服务接口都会返回状态.现在客户要做每一个服务器 做入站端口管控,一切不必要的端 ...
- .Net关闭数据库连接时判断ConnectionState为Open还是Closed?
两种写法: if (conn.State == System.Data.ConnectionState.Open) { conn.Close(); ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q88-Q91)
Question 88 You are designing a SharePoint 2010 application that stores data in a list named Base L ...
- IOS开发札记
//遍历所有的子控件,并打印其Frame +(NSString )searchAllSubviews:(UIView )superview { NSMutableString xml = [NSMut ...
- android调试工具DDMS的使用详解
具体可见http://developer.android.com/tools/debugging/ddms.html. DDMS为IDE和emultor.真正的android设备架起来了一座桥梁.开发 ...
- 【代码笔记】iOS-点评内容
一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...
- Android源码笔记——Camera系统架构
Camera的架构与Android系统的整体架构保持一致,如下图所示,本文主要从以下四个方面对其进行说明. Framework:Camera.java Android Runtime:android_ ...
- Hadoop概念学习系列之Hadoop 生态系统(十二)
当下 Hadoop 已经成长为一个庞大的生态体系,只要和海量数据相关的领域,都有 Hadoop 的身影.下图是一个 Hadoop 生态系统的图谱,详细列举了在 Hadoop 这个生态系统中出现的各种数 ...
- sql server 索引分析相关sql
select object_id('dbo.FT_CFP_TRADE_SUBACCOUNT') select * from sys.partitions where [object_id]=14672 ...