【一个简单的整数问题2——线段树】

题目

代码

下面的两个代码的区别在于modify的分类,modify最简单的分类方式是存在性分类,另一种类似某些query采用的三段式分类,详细见代码

存在性

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5+10;
int a[N];
struct node
{int l, r;ll sum;ll add;
}tr[4*N];
void pushup(int u)
{tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
}
void pushdown(int i)
{node &u = tr[i], &l = tr[i << 1], &r = tr[i << 1 | 1];if(u.add){l.add += u.add; r.add += u.add;l.sum += (l.r - l.l + 1) * u.add; r.sum += (r.r - r.l + 1) * u.add;u.add = 0;}
}
void build(int u, int l, int r)
{if(l == r) tr[u] = {l, r, a[l], 0};else{tr[u] = {l, r};int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid+1 , r);pushup(u);}
}
void modify(int u, int l, int r, int v)
{if(l <= tr[u].l && tr[u].r <= r){tr[u].add += v;tr[u].sum += (ll)(tr[u].r - tr[u].l + 1) * v;return;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) modify(u << 1, l, r, v);if(r > mid) modify(u << 1 | 1, l, r, v);pushup(u);
}
ll query(int u, int l, int r)
{if(l <= tr[u].l && tr[u].r <= r) return tr[u].sum;pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(r <= mid) return query(u << 1, l, r);else if(l > mid) return query(u << 1 | 1, l, r);else{ll ans = 0;ans += query(u << 1, l, r);ans += query(u << 1 | 1, l, r);return ans;}
}
int main()
{int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];build(1, 1, n);while (m -- ){char op; int l, r;cin >> op >> l >> r;if(op == 'C'){int d;cin >> d;modify(1, l, r, d);}else{cout << query(1, l, r) << '\n';}}return 0;
}

三段式

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5+10;
int a[N];
struct node
{int l, r;ll sum;ll add;
}tr[4*N];
void pushup(int u)
{tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
}
void pushdown(int i)
{node &u = tr[i], &l = tr[i << 1], &r = tr[i << 1 | 1];if(u.add){l.add += u.add; r.add += u.add;l.sum += (l.r - l.l + 1) * u.add; r.sum += (r.r - r.l + 1) * u.add;u.add = 0;}
}
void build(int u, int l, int r)
{if(l == r) tr[u] = {l, r, a[l], 0};else{tr[u] = {l, r};int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid+1 , r);pushup(u);}
}
void modify(int u, int l, int r, int v)
{if(l <= tr[u].l && tr[u].r <= r){tr[u].add += v;tr[u].sum += (ll)(tr[u].r - tr[u].l + 1) * v;return;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(r <= mid) modify(u << 1, l, r, v);else if(l > mid) modify(u << 1 | 1, l, r, v);else{modify(u << 1, l, r, v);modify(u << 1 | 1, l, r, v);}pushup(u);
}
ll query(int u, int l, int r)
{if(l <= tr[u].l && tr[u].r <= r) return tr[u].sum;pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(r <= mid) return query(u << 1, l, r);else if(l > mid) return query(u << 1 | 1, l, r);else{ll ans = 0;ans += query(u << 1, l, r);ans += query(u << 1 | 1, l, r);return ans;}
}
int main()
{int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];build(1, 1, n);while (m -- ){char op; int l, r;cin >> op >> l >> r;if(op == 'C'){int d;cin >> d;modify(1, l, r, d);}else{cout << query(1, l, r) << '\n';}}return 0;
}

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

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

相关文章

从源码到应用:在线教育系统与教培网校APP开发实战指南

时下&#xff0c;各类教培网校APP逐渐成为教育机构的核心工具。那么&#xff0c;如何从源码出发&#xff0c;开发一套符合需求的在线教育系统与教培网校APP&#xff1f;本文将从架构设计、功能实现到部署上线&#xff0c;提供一份全面的开发实战指南。 一、在线教育系统的核心架…

vscode下面python调试报错ImportError: cannot import name ‘Literal‘ from ‘typing‘

1 问题描述 我在vscode下面编写python程序&#xff0c;这个程序是在一个英伟达anoconda环境下的项目。之前能运行能调试&#xff0c;最近发现只能运行ctlf5&#xff0c;但是使用f5进行调试时&#xff0c;报错“File “c:\Users\86137.vscode\extensions\ms-python.debugpy-202…

智能外呼,轻松触达海外客户

在全球化的今天&#xff0c;海外市场已成为众多企业寻求增长的重要阵地。然而&#xff0c;如何高效、精准地触达海外客户&#xff0c;一直是企业面临的一大挑战。沃丰科技推出了智能外呼机器人&#xff0c;为企业打开了一扇通往海外市场的智慧之门。 沃丰科技外呼机器人的核心…

小鹏汽车智慧材料数据库系统项目总成数据同步

1、定时任务处理 2、提供了接口 小鹏方面提供的推送的数据表结构&#xff1a; 这几个表总数为100多万&#xff0c;经过条件筛选过滤后大概2万多条数据 小鹏的人给的示例图&#xff1a; 界面&#xff1a; SQL: -- 查询车型 select bmm.md_material_id, bmm.material_num, bm…

Parker派克防爆电机在实际应用中的安全性能如何保证?

Parker防爆电机确保在实际应用中的安全性能主要通过以下几个方面来保证&#xff1a; 1.防爆外壳设计&#xff1a;EX系列电机采用强大的防爆外壳&#xff0c;设计遵循严格的防爆标准&#xff0c;能够承受内部可能发生的爆炸而不破损&#xff0c;利用间隙切断原理&#xff0c;防…

如何在Word文件中设置水印以及如何禁止修改水印

在日常办公和学习中&#xff0c;我们经常需要在Word文档中设置水印&#xff0c;以保护文件的版权或标明文件的机密性。水印可以是文字形式&#xff0c;也可以是图片形式&#xff0c;能够灵活地适应不同的需求。但仅仅设置水印是不够的&#xff0c;有时我们还需要确保水印不被随…

Linux高阶——1123—

1、服务器基础 1、服务器基本概述 在CS架构下&#xff0c;client and server下&#xff0c;工程师研发服务器&#xff0c;经典的后端程序&#xff0c;为前端&#xff08;客户端&#xff09;提供数据处理支持、数据中转、数据持久化等功能&#xff0c;在互联网中&#xff0c;几…

鸿蒙NEXT开发案例:字数统计

【引言】 本文将通过一个具体的案例——“字数统计”组件&#xff0c;来探讨如何在鸿蒙NEXT框架下实现这一功能。此组件不仅能够统计用户输入文本中的汉字、中文标点、数字、以及英文字符的数量&#xff0c;还具有良好的用户界面设计&#xff0c;使用户能够直观地了解输入文本…

贪心算法(1)

目录 柠檬水找零 题解&#xff1a; 代码&#xff1a; 将数组和减半的最少操作次数&#xff08;大根堆&#xff09; 题解&#xff1a; 代码&#xff1a; 最大数&#xff08;注意 sort 中 cmp 的写法&#xff09; 题解&#xff1a; 代码&#xff1a; 摆动序列&#xff0…

linux从0到1——shell编程7

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

微软发布Win11 24H2系统11月可选更新KB5046740!

系统之家11月22日报道&#xff0c;微软针对Win11 24H2系统推出2024年11月最新可选更新补丁KB5046740&#xff0c;更新后系统版本后升至26100.2454&#xff0c;此次更新后修复当应用程序以PDF和XLSX格式导出图表对象时停止响应、无法使用API查找旋转信息等问题。以下小编将给大家…

五天SpringCloud计划——DAY2之使用Docker完成项目的部署

一、引言 刚刚学完了Docker的使用&#xff0c;现在知识在脑子里面还是热乎的&#xff0c;是时候把它总结一下了。 现在的我认为Docker时一个部署项目的工具(不知道是不是真的),相比于我以前使用宝塔面板部署项目&#xff0c;使用Docker更能让我看到代码之美&#xff0c;怎么一…

设计模式之 模板方法模式

模板方法模式是行为型设计模式的一种。它定义了一个算法的骨架&#xff0c;并将某些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。 模板方法模式的核心在于&#xff1a; 封装算法的骨架&#xff1a;通过父类中的模板方…

Softing线上研讨会 | Ethernet-APL:推动数字时代的过程自动化

| &#xff08;免费&#xff09;线上研讨会时间&#xff1a;2024年11月19日 16:00~16:30 / 23:00~23:30 Ethernet-APL以10Mb/s的传输速率为过程工业中的现场设备带来了无缝以太网连接和本质安全电源&#xff0c;这不仅革新了新建工厂&#xff0c;也适用于改造现有工厂。 与现…

Idea修改Commit Changes模式、idea使用git缺少部分Commit Changes

文章目录 一、模式一1、页面效果如下2、如何打开为这种样式&#xff1f; 二、模式二1、页面效果如下2、如何打开为这种样式&#xff1f; 三、总结 前言&#xff1a;Idea中代码提交到git库时的commit Change有两种模式&#xff0c;每种模式的界面及功能都不太一样。 Commit Cha…

东土科技孵化的“网联汽车高速通信技术”前沿产品亮相2024WICV大会

2024世界智能网联汽车大会&#xff08;WICV&#xff09;于近日在北京召开。本次大会发布了由中国汽车工程学会组织全球200余位专家&#xff0c;联合评审遴选出未来十年对于智能网联汽车发展具有重要影响的十大技术趋势&#xff0c;包括“面向高级别自动驾驶的超级人工智能”“网…

使用itextpdf进行pdf模版填充中文文本时部分字不显示问题

在网上找了很多种办法 都解决不了; 最后发现是文本域字体设置出了问题; 在这不展示其他的代码 只展示重要代码; 1 引入扩展包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</v…

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…

自动驾驶之激光雷达

这里写目录标题 1 什么是激光雷达2 激光雷达的关键参数3 激光雷达种类4 自动驾驶感知传感器5 激光雷达感知框架5.1 pointcloud_preprocess5.2 pointcloud_map_based_roi5.3 pointcloud_ground_detection5.4 lidar_detection5.5 lidar_detection_filter5.6 lidar_tracking 1 什么…

pycharm在使用conda虚拟环境时Terminal爆红问题

问题&#xff1a; 解决方法&#xff1a; 复制cmd.exe后面所有路径 添加到pycharm的shell path中&#xff1a;