A Simple Problem with Integers POJ - 3468 (线段树)

思路:线段树,区间更新,区间查找
#include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<set>
#include<algorithm>
#include<cstdio>
#include<map>
#include<cstring>
#include<list> #define MAXSIZE 100010 using namespace std; long long tree[*MAXSIZE];
long long lz[*MAXSIZE];
int N, Q; void init()
{
memset(tree, , sizeof(tree));
memset(lz, , sizeof(lz));
} void build(int node, int l, int r)
{
if(l == r)
{
scanf("%lld", &tree[node]);
return;
} int mid = (l+r)/;
build(node*, l, mid);
build(node*+, mid+, r); tree[node] = tree[node*] + tree[node*+];
} void push_down(int node, int l, int r)
{
if(lz[node])
{
int mid = (l+r)/;
lz[node*] += lz[node];
lz[node*+] += lz[node];
tree[node*] += (mid-l+)*lz[node];
tree[node*+] += (r-mid)*lz[node];
lz[node] = ;
}
} void update_range(int node, int l, int r, int L, int R, int add)
{
if(l <= L && r >= R)
{
lz[node] += add;
tree[node] += (R-L+)*add;
return;
}
push_down(node, L, R);
int mid = (L+R)/;
if(mid >= l)
update_range(node*, l, r, L, mid, add);
if(mid < r)
update_range(node*+, l, r, mid+, R, add);
tree[node] = tree[node*] + tree[node*+];
} long long query_range(int node, int l, int r, int L, int R)
{
if(l <= L && r >= R)
{
return tree[node];
}
push_down(node, L, R);
int mid = (L+R)/;
long long sum = ;
if(mid >= l)
sum += query_range(node*, l, r, L, mid);
if(mid < r)
sum += query_range(node*+, l, r, mid+, R); return sum;
} int main()
{
scanf("%d%d", &N, &Q);
init();
build(, , N);
while(Q--)
{
char ch;
scanf(" %c", &ch);
if(ch == 'Q')
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lld\n", query_range(, a, b, , N));
}
else if(ch == 'C')
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
update_range(, a, b, , N, c);
}
} return ;
}
A Simple Problem with Integers POJ - 3468 (线段树)的更多相关文章
- C - A Simple Problem with Integers POJ - 3468 线段树模版(区间查询区间修改)
参考qsc大佬的视频 太强惹 先膜一下 视频在b站 直接搜线段树即可 #include<cstdio> using namespace std; ; int n,a[maxn]; stru ...
- A Simple Problem with Integers POJ - 3468 线段树区间修改+区间查询
//add,懒标记,给以当前节点为根的子树中的每一个点加上add(不包含根节点) // #include <cstdio> #include <cstring> #includ ...
- A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 69589 ...
- ACM: A Simple Problem with Integers 解题报告-线段树
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %l ...
- POJ 3468 A Simple Problem with Integers(详细题解) 线段树
这是个线段树题目,做之前必须要有些线段树基础才行不然你是很难理解的. 此题的难点就是在于你加的数要怎么加,加入你一直加到叶子节点的话,复杂度势必会很高的 具体思路 在增加时,如果要加的区间正好覆盖一个 ...
- A Simple Problem with Integers~POJ - 3468
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
- A Simple Problem with Integers POJ - 3468 (分块)
题目链接:https://cn.vjudge.net/problem/POJ-3468 题目大意:区间加减+区间查询操作. 具体思路:本来是一个线段树裸题,为了学习分块就按照分块的方法做吧. 分块真的 ...
- C - A Simple Problem with Integers - poj 3468(区间更新)
题意:有一个比较长的区间可能是100000.长度, 每个点都有一个值(值还比较大),现在有一些操作,C abc, 把区间a-b内全部加上c, Qab,求区间ab的值. 分析:很明显我们不可能对区间的每 ...
- POJ 3468 线段树 成段更新 懒惰标记
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072K Case Time Limit:2000MS Descr ...
随机推荐
- mysql 表查询结果 总行数计算
一般的查询语句是这样的 SELECT id,name FROM SystemEvents WHERE 1=1 limit 9,10 SELECT * FROM SystemEvents WHER ...
- 手把手教你接口自动化测试 – SoapUI & Groovy【转】
手把手教你接口自动化测试 – SoapUI & Groovy Posted on 2015-01-21 09:38 WadeXu 阅读(12741) 评论(10) 编辑 收藏 手把手教你接口自 ...
- python中用json存储列表字典等文件操作
JSON字符串用json.dumps, json.loads JSON文件名用json.dump, json.load 由于需要在脚本重启后依旧能够记住之前所使用的列表内容, 故采用json存储列表文 ...
- System.Web.Mvc.ValueProviderResult.cs
ylbtech-System.Web.Mvc.ValueProviderResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral ...
- 03-python 学习第三天:文件操作
今天学习了打开文件.读取文件.追加内容的操作. 操作实例1:修改文件 思路: 1.修改文件一般有两种方法,一是将文件读取后加载到内存中修改然后写入磁盘,第二种方法是逐行读取并处理.小的文件用第一种方法 ...
- python学习笔记3.1_数据读取常用函数参数
一.read_table/read_csv常用函数参数 1.path:表明文件系统位置的字符串.url或文件型对象 2.sep或delimiter:用于分隔每行字段的字符序列或正则表达式 3.head ...
- 07-img和a标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- boost 日期时间计算
示例代码如下: #include <boost/date_time/gregorian/gregorian.hpp> #include <boost/date_time/posix_ ...
- set_clock_latency
set_clock_latancy用于定于虚拟时钟与真实时钟的延时 考虑最糟糕的情况,评估setup时数据会使用最大延时,时钟使用最小延时:评估hold时,数据使用最小延时,时钟使用最大延时.
- Oracele 11.2.0.3 的一个问题
最近又在折腾Oracle.由于要用到Oracle spatial对Google投影的空间数据的操作,所以得安装11.2.0.3以上版本的Oracle.但是发现这样的一个问题,当我在64位系统的笔记本上 ...