POJ-3468-A Simple Problem with integers
链接:https://vjudge.net/problem/POJ-3468
题意:
给定n个树,存在区间更新和区间查找。
思路:
区间更新,延迟标记。
延迟标价某个节点表示,下面的节点存在延迟的值未更新,下一次查找到或使用时更新。
减小时间消耗。
代码:
#include <iostream>
#include <memory.h>
#include <vector>
#include <map>
#include <algorithm>using namespace std;typedef long long LL;const int MAXN = 1e5 + 10;LL a[MAXN];
LL segment[MAXN * 4];
LL add[MAXN * 4];void Push_down(int root, int l, int r)
{//线段树区间更新延迟更新操作if (add[root])//表示有延迟标记{//将上一层的标记移至下一层add[root << 1] += add[root];add[root << 1 | 1] += add[root];int mid = (l + r) >> 1;segment[root << 1] += add[root] * (mid - l + 1);//将下一层的线段树值更新segment[root << 1 | 1] += add[root] * (r - mid);add[root] = 0;//本曾延迟更新完毕,清楚本曾更新。}
}void Build_tree(int root, int l, int r)
{if (l == r){segment[root] = a[l];return;}int next_node = root << 1;int mid = (l + r) / 2;Build_tree(next_node, l, mid);Build_tree(next_node + 1, mid + 1, r);segment[root] = segment[next_node] + segment[next_node + 1];
}void Update(int root, int l, int r, int ql, int qr, int c)
{if (ql > r || qr < l)return;if (ql <= l && r <= qr){segment[root] += c * (r - l + 1);//更新查找区间add[root] += c;//延迟更新标记}else{Push_down(root, l, r);//更新此点的延迟标记int mid = (l + r) / 2;Update(root << 1, l, mid, ql, qr, c);Update(root << 1 | 1, mid + 1, r, ql, qr, c);segment[root] = segment[root << 1] + segment[root << 1 | 1];}
}LL Query(int root, int l, int r, int ql, int qr)
{if (ql > r || qr < l)return 0LL;if (ql <= l && r <= qr)return segment[root];Push_down(root, l, r);int mid = (l + r) / 2;LL res = 0;res += Query(root << 1, l, mid, ql, qr);res += Query(root << 1 | 1, mid + 1, r, ql, qr);return res;
}int main()
{int n, q;scanf("%d%d", &n, &q);for (int i = 1;i <= n;i++)cin >> a[i];Build_tree(1, 1, n);char op[10];int a, b, c;while (q--){scanf("%s", op);if (op[0] == 'Q'){scanf("%d%d", &a, &b);printf("%lld\n", Query(1, 1, n, a, b));}else{scanf("%d%d%d", &a, &b, &c);Update(1, 1, n, a, b, c);}}return 0;
}
转载于:https://www.cnblogs.com/YDDDD/p/10425755.html
POJ-3468-A Simple Problem with integers相关推荐
- 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)
[线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...
- poj 3468 A Simple Problem with Integers(线段树区区)
题目链接: http://poj.org/problem?id=3468 题目大意: 给出N个数,和M次查询 C a b c 区间[a,b]的值都加上c Q a b 查询区间[a,b]值 ...
- POJ 3468 A Simple Problem with Integers(线段树:区间更新)
http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...
- POJ 3468 A Simple Problem with Integers
分析:这题wa了好多次(看了下discuss好多人也是这样,好题~).一处是sum值会超int32,要用int64.还有一处是toadd要累加,我不知道是受上一题影响还是怎的..pushdown的时候 ...
- POJ 3468 A Simple Problem with Integers (1)
POJ_3468(1) 在消化了PPT上思想之后,又重新做了一下这个题目. 不妨将原数组的元素记作a[i],然后我们用堆建立两棵线段树,一棵的原数组为x[i](x[i]=a[i]-a[i-1],即原数 ...
- POJ - 3468 A Simple Problem with Integers(分块)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次操作,每次操作分为两种情况: C l r d:区间 [ l , r ] 内的数字都加上 d Q l r :查询 [ l , r ...
- POJ 3468 A Simple Problem with Integers(线段树区间更新)
题目链接 这个真费劲...其实我也不懂 为什么...大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除...多敲几遍,多调试一 ...
- poj 3243:A Simple Problem with Integers
3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制: 5000ms 单个测试点时间限制: 2000ms 内存限制: 131072 ...
- 线段树专辑—— pku 3468 A Simple Problem with Integers
http://poj.org/problem?id=3468 典型的一道基于lazy传递的线段树题目,这题和一般题目不同的地方在于,它的每次操作不是简单的覆盖线段,而是累加.记得第一次写的时候纠结了好 ...
- poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
1 /* 2 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! 3 */ 4 #include<iostream> 5 #include<cstring> 6 ...
最新文章
- ZZNU 1993: cots' friends
- 德国小哥1人“黑掉”谷歌地图:99部手机就能造成交通拥堵
- ElasticSearch 2 (21) - 语言处理系列之单词识别
- max's java road
- 如果使用StateServer或SQLServer,会遇到的问题。。。。
- 怎样在CSDN的博客里面显示上传的图片,教你一招
- P1165 日志分析
- Tensorflow2下载与安装
- 在小公司待了3年后,我废了
- 【iOS】Web Color 的 Swift 实现
- vb导出mysql字段名_VB获取数据库字段名
- Spring源码下载编译全过程!超详细的步骤!!!
- codeblock的汉化过程
- 超级无敌diao炸天的手写堆
- 关于英语学习和字幕的那点事儿
- PWM 脉冲宽度调制
- datagridview 获取选中行号 数据,判断是不是选中了一行
- EXCEL数组公式,求多条件下的中位数的实现方法和注意点
- 无法在web服务器上启动调试。未能启动asp.net调试。在不调试的情况下启动项目也许能获得更多信息。
- 2019 SUST暑期集训题解(计算几何(二))
热门文章
- Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生产实践
- 其实你的领导也有中年危机
- python一行输出_#python版一行内容分行输出
- 全国计算机一级考试难度高吗,计算机等级考试分几级 考试难度大不大
- java怎么根据编号修改数据类型_Java中怎么根据不同的输入数据类型调用不同的方法呢?...
- mysql 1236错误_MySQL主主同步环境出现1236错误
- FR两个相同字符如何提取第二个字符后内容
- 网络摄像头ip php,C#实现IP摄像头的方法
- 大数据平台搭建_【他山之石】自研搭建Hadoop数据科学开发环境,促进大数据平台建设降本增效...
- 在python中使用sort_详解python中sort排序使用