2023-07-26 LeetCode每日一题(更新数组后处理求和查询)

2023-07-26每日一题

一、题目编号

2569. 更新数组后处理求和查询

二、题目链接

点击跳转到题目位置

三、题目描述

给你两个下标从 0 开始的数组 nums1 和 nums2 ,和一个二维数组 queries 表示一些操作。总共有 3 种类型的操作:

  1. 操作类型 1 为 queries[i] = [1, l, r] 。你需要将 nums1 从下标 l 到下标 r 的所有 0 反转成 1 或将 1 反转成 0 。l 和 r 下标都从 0 开始。

  2. 操作类型 2 为 queries[i] = [2, p, 0] 。对于 0 <= i < n 中的所有下标,令 nums2[i] = nums2[i] + nums1[i] * p 。

  3. 操作类型 3 为 queries[i] = [3, 0, 0] 。求 nums2 中所有元素的和。

请你返回一个数组,包含所有第三种操作类型的答案。

提示:

  • 1 <= nums1.length,nums2.length <= 105
  • nums1.length = nums2.length
  • 1 <= queries.length <= 105
  • queries[i].length = 3
  • 0 <= l <= r <= nums1.length - 1
  • 0 <= p <= 106
  • 0 <= nums1[i] <= 1
  • 0 <= nums2[i] <= 109

示例 1:
在这里插入图片描述
示例2:
在这里插入图片描述

四、解题代码

class Solution {struct SegNode {int l, r, sum;bool lazytag;SegNode() {this->l = 0;this->r = 0;this->sum = 0;this->lazytag = false;}
};class SegTree {
private:vector<SegNode> arr;public:SegTree(vector<int>& nums) {int n = nums.size();arr = vector<SegNode>(n * 4 + 1);build(1, 0, n - 1, nums);}int sumRange(int left, int right) {return query(1, left, right);}void reverseRange(int left, int right) {modify(1, left, right);}void build(int id, int l, int r, const vector<int> &nums) {arr[id].l = l;arr[id].r = r;arr[id].lazytag = false;if(l == r) {arr[id].sum = nums[l];return;}int mid = (l + r) >> 1;build(2 * id, l, mid, nums);build(2 * id + 1, mid + 1, r, nums);arr[id].sum = arr[2 * id].sum + arr[2 * id + 1].sum;}/* pushdown函数:下传懒标记,即将当前区间的修改情况下传到其左右孩子结点 */void pushdown(int x) {if(arr[x].lazytag) {arr[2 * x].lazytag = !arr[2 * x].lazytag;arr[2 * x].sum = arr[2 * x].r - arr[2 * x].l + 1 - arr[2 * x].sum;arr[2 * x + 1].lazytag = !arr[2 * x + 1].lazytag;arr[2 * x + 1].sum = arr[2 * x + 1].r - arr[2 * x + 1].l + 1 - arr[2 * x + 1].sum;arr[x].lazytag = false;}}/* 区间修改 */void modify(int id, int l, int r) {if (arr[id].l >= l && arr[id].r <= r) {arr[id].sum = (arr[id].r - arr[id].l + 1) - arr[id].sum;arr[id].lazytag = !arr[id].lazytag;return;}pushdown(id);int mid = (arr[id].l + arr[id].r) >> 1;if (arr[2 * id].r >= l) {modify(2 * id, l, r);}if(arr[2 * id + 1].l <= r) {modify(2 * id + 1, l, r);}arr[id].sum = arr[2 * id].sum + arr[2 * id + 1].sum;}/* 区间查询 */int query(int id, int l, int r) {if (arr[id].l >= l && arr[id].r <= r) {return arr[id].sum;}if (arr[id].r < l || arr[id].l > r) {return 0;}pushdown(id);int res = 0;if (arr[2 * id].r >= l) {res += query(2 * id, l, r);}if (arr[2 * id + 1].l <= r) {res += query(2 * id + 1, l, r);}return res;}
};public:vector<long long> handleQuery(vector<int>& nums1, vector<int>& nums2, vector<vector<int>>& queries) {int n = nums1.size();int m = queries.size();SegTree tree(nums1);long long sum = accumulate(nums2.begin(), nums2.end(), 0LL);vector<long long> ans;for (int i = 0; i < m; i++) {if (queries[i][0] == 1) {int l = queries[i][1];int r = queries[i][2];tree.reverseRange(l, r);} else if (queries[i][0] == 2) {sum += (long long)tree.sumRange(0, n - 1) * queries[i][1];} else if (queries[i][0] == 3) {ans.emplace_back(sum);}}return ans;}
};

五、解题思路

(1) 使用线段树来解决问题。

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

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

相关文章

跨境电商多语言带直播功能功能列表

一、直播导购 1.直播入驻管理&#xff1a;直播入驻实际上就是商家入驻&#xff0c;开通商家后会获得直播权限 2.直播观看/拉流页面(分三屏&#xff0c;可以左右滑动&#xff09;&#xff1a; 左屏&#xff1a; 直播间信息&#xff1a;直播间名称、直播封面、房间号、在线人数、…

思格新能源面试(部分)

面试官聊到他们是做储能的&#xff0c;是从华为数字能源独立出来的。他们主要缺算法的人。他们调用了ChatGPT的接口&#xff0c;但一是比较慢&#xff0c;二是回答质量不太满意。 你了解一些大数据技术吗&#xff0c;你们公司用到哪些? 有没有一些实时的流式计算的场景&#…

【C语言项目】扫雷(详解,附图、附代码示范)

文章目录 项目思路一、分文件进行创建二、进入游戏前的目录2.1 目录的功能&#xff1a;2.2 目录界面&#xff1a;2.3 选择进入或退出游戏2.3.1 代码示范2.3.2 图片示例&#xff1a; 三、画出游戏界面3.1 创建两个数组3.2 初始化数组3.3 打印游戏界面3.3.1 代码思路3.3.2 代码示…

HDU - 7308 Operation Hope( 2023“钉耙编程”中国大学生算法设计超级联赛第三场 I)

题目 Little Q \text{Little Q} Little Q is playing an RPG \text{RPG} RPG online game. In this game, there are n n n characters labeled by 1 , 2 , … , n 1,2,…,n 1,2,…,n. The i-th character has three types of quotas: a i a_i ai​ - The maximum points of…

gin框架内容(二)

上一篇过于gin的内容 https://mp.csdn.net/mp_blog/creation/editor/131953861 CSDNhttps://mp.csdn.net/mp_blog/creation/editor/131953861 一、路由组 为了管理具有相同前缀的URL, 将拥有URL共同前缀的路由划分为一组 为了代码的阅读性&#xff0c;使用{}包裹相同组的路由…

WPF icon的设置

想给控件设置个圆形图片&#xff0c;代码如下&#xff1a; ​<Setter Property"Icon"><Setter.Value><Image Source"/WpfApp1;component/Resource/1.ico" Width"16" Height"16"/></Setter.Value></Setter&…

ncnn-android-yolov7跑自己模型的注意事项

ncnn-android-yolov7 这是一个示例 ncnn android 项目&#xff0c;它依赖于 ncnn 库和 opencv https://github.com/Tencent/ncnn https://github.com/nihui/opencv-mobile https://github.com/xiang-wuu/ncnn-android-yolov7 如何构建和运行 步骤1 https://github.com/Ten…

LeetCode 0771. 宝石与石头

【LetMeFly】771.宝石与石头 力扣题目链接&#xff1a;https://leetcode.cn/problems/jewels-and-stones/ 给你一个字符串 jewels 代表石头中宝石的类型&#xff0c;另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型&#xff0c;你想…

linux 在excel里面找内容

linux 在excel里面找内容 背景&#xff1a;在大数据行业中&#xff0c;很多数据源是excel文件&#xff0c;但是常常会出现查找excel内容找到对应的文件&#xff0c;所以制作了简单的shell脚本方便查询对应的excel文件 查看下面精简的内容即可&#xff0c;开箱即用 shell转换 …

网络知识点之-堆叠与集群(1-堆叠)

本文章收录至《网络》专栏&#xff0c;点击右上角专栏图标可访问本专栏&#xff01; 堆叠技术是在以太网交换机上扩展端口使用较多的另一类技术&#xff0c;是一种非标准化技术。各个厂商之间不支持混合堆叠&#xff0c;堆叠模式为各厂商制定&#xff0c;不支持拓扑结构。流行的…

flask自己写登录验证和角色验证

python flask程序需要用户登录也需要角色验证&#xff0c;可以采用如下方法 def is_login(func):wraps(func)def inner(*args,**kwargs):user session.get(user)if not user:return redirect(url_for(login))return func(*args,**kwargs)return innerdef roles_required(*arg…

vue项目实现数组中添加多个相同的对象

在写项目的时候&#xff0c;有时候想有一个有较大length的对象数组&#xff0c;则可以使用如下的方法&#xff1a; export default {data() {const item {date: 2016-05-02,name: 王小虎,address: 上海市普陀区金沙江路 1518 弄};return {tableData: Array(20).fill(item)}} …

将Parasoft和ChatGPT相结合会如何?

ChatGPT是2023年最热门的话题之一&#xff0c;是OpenAI训练的语言模型。它能够理解和生成自然语言文本&#xff0c;并接受过大量数据的训练&#xff0c;包括用各种编程语言编写的许多开源项目的源代码。 软件开发人员可以利用大量的知识库来协助他们的工作&#xff0c;因为它具…

「预告」飞凌嵌入式邀您相约第13届配电技术应用论坛

2023年8月3日~5日&#xff0c;第十三届配电技术应用论坛即将在浙江杭州举行&#xff0c;飞凌嵌入式受邀参加。 作为助力快速实现“双碳”目标和新型电力系统建设&#xff0c;加强“双碳”目标下的智能配电网技术研发布局的主要会议&#xff0c;第十三届配电技术应用论坛将从政…

vue 前端 邮箱、密码、手机号码等输入验证规则

最近在写前端表单验证的时候&#xff0c;发现一篇文章质量很好&#xff0c;所以写下这篇文章记录 原文章链接&#xff1a;vue 邮箱、密码、手机号码等输入验证规则 1.手机号 const checkPhone (rule, value, callback) > {const phoneReg /^1[34578]\d{9}$$/;if (!value…

力扣刷题-翻转字符串

刷题链接&#xff1a;344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&…

【vue3】vue3接收props以及emit的用法

技术&#xff1a;vue3.2.40 UI框架&#xff1a;arco-design 2.44.7 css技术&#xff1a;less 4.1.3 实现&#xff1a;子组件接收props以及通过emit方法传值父组件 vue3使用的组合式API&#xff0c;我这里使用的是defineComponent 1.父页面调用子组件 <template><d…

FPGA开发:按键消抖

按键是FPGA开发板上的重要交互元件&#xff0c;因为按键的内部的结构设计&#xff0c;在按下和松开按键时&#xff0c;按键会无法避免地产生机械抖动&#xff0c;因此要对按键输入进行特殊处理&#xff0c;否则可能会因为机械抖动产生意外的重复触发。 按键消抖有很多方法&…

C++设计模式之模板方法、策略模式、观察者模式

面向对象设计模式是”好的面向对象设计“&#xff0c;所谓”好的面向对象设计“指的是可以满足”应对变化&#xff0c;提高复用“的设计。 现代软件设计的特征是”需求的频繁变化“。设计模式的要点是”寻求变化点&#xff0c;然后在变化点处应用设计模式&#xff0c;从而更好地…

我的2023上半年总结

Hi~C站的小伙伴们好久不见哇&#xff01;釉色终于回到C站&#xff0c;开始要输出了&#xff01;这一篇文章是我的2023上半年的总结&#xff0c;以此&#xff0c;致敬那段迷茫但又不曾被辜负的时光。 文章目录 总括——你愿意花五分钟时间读读我的文章吗学习——制定目标&#…