这是我第一题AC的线段树

题目简述: 有N个整数,Q次操作,每次操作为询问一个区间[a, b]内数的和(0号操作)或者把一个区间内的数全部加上v(1号操作)

线段树求解即可。

#include <cstdio>
#include <algorithm>
using std::min;
using std::max;
#define L(no) ((no) << 1)
#define R(no) (L(no) | 1)
#define PLUSTAG(no, val) plustag[no] += val, query[no] += val*(rb[no]-lb[no]+1)
const int MAXN = 400001;
int lb[MAXN], rb[MAXN], query[MAXN], ans, plustag[MAXN];
int sum(int a, int b) {return a + b;}
void build(int no, int l, int r) {int mid = l + r >> 1;lb[no] = l;rb[no] = r;if(l == r) scanf("%d", &query[no]);else {build(L(no), l, mid);build(R(no), mid + 1, r);query[no] = query[L(no)] + query[R(no)];}
}
void getval(int no, int l, int r, int(*func)(int, int), int* key) {int mid = lb[no] + rb[no] >> 1;if(l <= r && (lb[no] <= r&& rb[no] >= r || rb[no] >= l && lb[no] <= l)) {if(lb[no] == l && rb[no] == r) ans = func(ans, key[no]);else {if(plustag[no]) {PLUSTAG(L(no), plustag[no]);PLUSTAG(R(no), plustag[no]);plustag[no] = 0;}getval(L(no), l, min(mid, r), func, key);getval(R(no), max(l, mid + 1), r, func, key);}}
}
void plus(int no, int l, int r, int val) {int mid = lb[no] + rb[no] >> 1;if(l <= r && (lb[no] <= r&& rb[no] >= r || rb[no] >= l && lb[no] <= l)) {if(lb[no] == l && rb[no] == r) {PLUSTAG(no, val);}else {if(plustag[no]) {PLUSTAG(L(no), plustag[no]);PLUSTAG(R(no), plustag[no]);plustag[no] = 0;}query[no] += (r - l + 1) * val;plus(L(no), max(l, lb[no]), min(mid, r), val);plus(R(no), max(l, mid + 1), min(r, rb[no]), val);}}
}
int main() {int n, q, i, op, a, b, v;scanf("%d%d", &n, &q);build(1, 1, n);for(i = 1; i <= q; i++) {scanf("%d%d%d", &op, &a, &b);if(op == 0) {ans = 0;getval(1, a, b, sum, query);printf("%d\n", ans);}else {scanf("%d", &v);if(v != 0) plus(1, a, b, v);}}return 0;
}

解释一下:query[]表示一个区间里面的和……然后左右半区间分别搞……1操作时Lazy优化是必须要加的(就是好像老师布置的作业等要交了再补……),然后,便过之。

问我为什么getval写函数指针?因为这是百搭函数……要求最大值传入max最小值传min求和传sum……

然后:就没有然后了。过之。

转载于:https://www.cnblogs.com/nealchen/p/4290085.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a频繁连接不上redis_连接不到redis Caused by:..._慕课问答

redis装在linux虚拟机上&#xff0c;在xshell上可以成功访问redis&#xff0c;配了密码拿了老师完整的代码作测试&#xff0c;就是访问失败&#xff0c;不知道哪里出了问题地址端口密码都没错的&#xff0c;求解org.springframework.data.redis.RedisConnectionFailureExceptio…

抓localhost包 - rawcap

抓localhost包的话用wireshark好像有点麻烦&#xff0c;所以用rawcap RawCap官网 RawCap下载连接 直接运行&#xff0c;首先根据需要选择监听相应的网卡&#xff0c;然后再填写抓包文件保存的名字

持续集成交付CICD:Jira 发布流水线

目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira 远程触发 Jenkins 实现合并 GitLab 分支 4.K8S master节点操作 5.Jira 发布流水线 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins…

计算几何_多边形

判定凸多边形&#xff1a;顶点凹凸性法 连续三个顶点p1,p2,p3。计算p1p2,p2p3的叉乘&#xff0c;阶乘大于0&#xff0c;则表示p3点在线段p1和p2的左侧&#xff0c;然后依次计算下一个前后所组成向量的阶乘&#xff0c;如果在计算时&#xff0c;出现负值&#xff0c;则此多边形是…

wps完成率怎么设置_WPS表格中如何计算完成率?详细操作方法看这里!

平时我们在使用像WPS这样的办公软件时&#xff0c;我们经常会使用到其中的Excel表格软件&#xff0c;来完成日常工作当中所需要完成的各种数据的统计以及录入等工作。而在我们使用WPS表格来录入、修改或者是统计某一些数据时&#xff0c;我们往往会因为表格内容的设定需求&…

[原创]WebScarab工具介绍

[原创]WebScarab工具介绍 一 WebScarab介绍 WebScarab是一个用来分析使用HTTP和HTTPS协议的应用程序框架。其原理很简单&#xff0c;WebScarab可以记录它检测到的会话内容&#xff08;请求和应答&#xff09;&#xff0c;并允许使用者可以通过多种形式来查看记录。WebScarab的设…

段表的作用

表格来自《程序员的自我修养 ——链接、装载与库》 ELF段名作用.text代码段&#xff0c;存放执行语句.data数据段&#xff0c;存放初始化的全局变量和局部静态变量.bss未初始化的全局变量和局部静态变量.rodata只读数据段.comment注释信息段.note.GNU-stack堆栈提示段.debug调…

layoutSubviews总结

ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit——————- - (void)layoutSubviews- (void)layoutIfNeeded- (void)setNeedsLayout——————– - (void)setNeedsDisplay- (void)drawRectlayoutSubviews在下面情况下会被调用&#xff1a; …

三个彩灯循环点亮程序_近百组彩灯点亮江畔,义渡灯会正式亮灯啦

10月23日晚上&#xff0c;大渡口区义渡古镇华灯初上。夜幕之下&#xff0c;2020第一届义渡灯会亮灯仪式在此举行&#xff0c;来自四川的近百组彩灯将在这里点亮夜空&#xff0c;一直陪伴广大市民游客至明年元宵节后。当晚6点半&#xff0c;义渡灯会亮灯仪式正式开启。本次灯会以…

repeater序列号,换页数字不重新排

<td><%# Container.ItemIndex 1(Convert.ToInt32(this.drpCurrentPageIndex.SelectedValue)-1)*Convert.ToInt32(this.drpCount.SelectedValue)%></td>转载于:https://www.cnblogs.com/liziqiang/p/3457203.html

Altera的几个常用的Synthesis attributes(转载)

各厂商综合工具&#xff0c;对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方式。 语法为&#xff1a; /* synthesis, <any_company_specific_attribute value_or_optional_value */ 下面就是Al…

QPushButton hover配置

鼠标移动到QPushButton上面时显示下划线 //下面是当鼠标移动到按钮上时&#xff0c;按钮上的文字显示下划线 QPushButton#Button_2:hover{ text-decoration:underline; }//下面是普通显示 QPushButton#Button_2{ color:rgba(52, 144, 255 ,255); border-radius:0px; backgrou…

eclipse没有日志_强化公共DHT以抵抗eclipse攻击,ipfs官方还说了什么?

近日&#xff0c;IPFS官方发布博客&#xff0c;就如何强化公共DHT以抵抗eclipse攻击进行详细介绍&#xff0c;星球君帮大家翻译了一下&#xff0c;让我们来看看官方都说了什么吧&#xff1a;IPFS 2020 年的一个主要焦点是随着网络规模的不断扩大而改进内容路由。虽然我们已经对…

mongoDB简明教程-python(转)

MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。他支持的数据结构非常松散&#xff0c;是类似 json的bjson格式&#xff0c;因此可以存储比较复杂的数据类型。官方网站&#xff1a;http://www.mo…

HTTP基础10--web(2)

因输出值转义不完全引发的安全漏洞 实施 Web 应用的安全对策可大致分为以下两部分。 客户端的验证Web 应用端&#xff08;服务器端&#xff09;的验证: 输入值验证 / 输出值转义客户端允许篡改数据或关闭 JavaScript&#xff0c;不适合将 JavaScript 验证作为安全的防范对策。保…

单一课和综合课的划分依据_武夷岩茶产地如何划分?

产地是指某种物品的生产、出产或加工制造的地点&#xff0c;日常含义是指某种物品的主要生产地。本文探讨的武夷岩茶种植产地&#xff0c;也就是当地茶人俗称的“山场”。武夷岩茶“山场”的俗称可能缘起于宋代的茶政。宋代官府设置“榷&#xff08;qu&#xff09;茶场”&#…

windows文件路径大于MAX_PATH

如果文件路径大于MAX_PATH&#xff0c;是无法直接用CreatFile、fopen等方法来打开文件 但是可以通过在路径前面加上“\\?\”来获取文件 比如想要打开下面的文件123.txt&#xff0c;但是文件路径是很长的&#xff08;假设…是200个字符&#xff09;&#xff1a; C:\123...\1…

C# 枚举 字符串 转换

普通方法 这种方法尽管很SB但确实可以解决问题 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){string SelPath "";switch (comboBox1.SelectedIndex){case 0: SelPath System.Environment.GetFolderPath(System.Environment.SpecialFo…

arduino 机器视觉编程_万物皆可仿真的MATLAB/Simulink神奇在哪?解析如何将其应用于一整套机器人设计开发流程...

MATLAB/Simulink&#xff1a;万物皆可仿真 MATLAB是由美国MathWorks公司出品的一款商业数学软件。它是一个多功能的科学计算平台&#xff0c;将算法开发、数据分析、矩阵计算等诸多强大功能集成在一个易于操作的视窗环境中。MATLAB下的Simulink更是被认为可以“仿真任何系统”。…

排序算法(1) 快速排序 C++实现

快速排序基本特性 时间复杂度&#xff1a;O&#xff08;n*lgn&#xff09;最坏&#xff1a;O&#xff08;n^2&#xff09;空间复杂度&#xff1a;最好情况下&#xff1a;O&#xff08;lgn&#xff09;&#xff0c;最坏情况&#xff1a;O(n)&#xff0c;平均情况&#xff1a;O(l…