【一个简单的整数问题】

问题

在这里插入图片描述


TLE代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int b[N];
void add(int l, int r, int d)
{b[r+1] -= d;b[l] += d;
}
int query(int x)
{int retval = 0;for(int i = 1; i <= x; i++){retval += b[i];}return retval;
}
int main()
{int n, m;scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++){int tmp;scanf("%d", &tmp);add(i, i, tmp);}for(int i = 1; i <= m; i++){char op;scanf(" %c", &op);if(op == 'C'){int l, r, d;scanf("%d%d%d", &l, &r, &d);add(l, r, d);}else if(op == 'Q'){int x;scanf("%d", &x);printf("%d\n", query(x));}}return 0;
}

假设n=1e5, m=1e5, 操作全是Q,则操作次数达到
1 0 10 10^{10} 1010


正确代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int b[N];
int n, m;
int lowbit(int x)
{return x & (-x);
}
void update(int x, int d)
{for(; x <= n; x += lowbit(x)){b[x] += d;}
}
int query(int x)
{int retval = 0;for(; x >= 1; x -= lowbit(x)){retval += b[x];}return retval;
}
int add(int l, int r, int d)
{update(l, d);update(r+1, -d);
}
int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++){int tmp;scanf("%d", &tmp);add(i, i, tmp);}for(int i = 1; i <= m; i++){char op;scanf(" %c", &op);if(op == 'C'){int l, r, d;scanf("%d%d%d", &l, &r, &d);add(l, r, d);}else if(op == 'Q'){int x;scanf("%d", &x);printf("%d\n", query(x));}}return 0;
}

思考

对比前缀和、差分和树状数组
算法目的单次操作复杂度
前缀和快速求子段和区间求和 O ( 1 ) O(1) O(1) \; 区间修改 O ( n ) O(n) O(n)
差分快速子段修改区间修改 O ( 1 ) O(1) O(1) \; 单点查询 O ( n ) O(n) O(n)
树状数组均衡上述目的,同时是动态版前缀和单点修改 O ( l o g n ) O(logn) O(logn) \; 区间求和 O ( l o g n ) O(logn) O(logn)
差分+树状数组均衡差分 \; 单点查询 O ( l o g n ) O(logn) O(logn)

区间修改指的是区间加减 能够区间求和就自然可以单点查询
差分+树状数组的思路:树状数组维护差分序列,通过树状数组的单点修改操作进行差分的区间修改,通过树状数组的区间求和优化差分的单点查询


总结树状数组

在这里插入图片描述
求区间和要想到 (1)
单点修改要想到 (3)

在这里插入图片描述

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

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

相关文章

【软件测试】测试分类

系列文章目录 第一章 【软件测试】常见的开发模型和测试模型 第二章 【软件测试】bug以及测试用例的设计方法 文章目录 系列文章目录前言一、按照测试目标进行分类二、按照执行方式分类三、按照测试方法四、按照测试阶段分类五、按照实施组织分类总结 前言 在前文中简单了解了…

掌握测试的艺术:深入探索Python的pytest库

文章目录 **掌握测试的艺术&#xff1a;深入探索Python的pytest库**背景&#xff1a;为什么选择pytest&#xff1f;pytest是什么&#xff1f;如何安装pytest&#xff1f;5个简单的库函数使用方法1. pytest.main()2. pytest.skip()3. pytest.mark.parametrize()4. pytest.raises…

(1)冒泡排序和其优化

一 冒泡排序 1.1 冒泡排序概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种交换排序&#xff0c;基本思想是&#xff1a;两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序记录位置。 假设要对无序数列{2,3,4,5,6,7,8,1}排序&#xff1a;…

VastBase——执行计划

一、SQL的执行过程 1.词法分析 从查询语句中识别出系统支持的关键字、标识符、运算符、终结符等&#xff0c;确定每个词固有的特性。 以如下这个查询为例&#xff1a; select name from test_0717 where id > 1; 该SQL语句可以划分的关键字、标识符、运算符、常量等…

深入理解linux内核hung_task机制,最全!原创!

背景 最近的一个项目里&#xff0c;发生的问题近乎多半都是hangdetect的问题&#xff0c;之前一直对这种问题总是一知半解&#xff0c;发现主要是因为对此种维测方案(hangdetect/hangtask/watchdog/hungdetect)的理解不够深刻&#xff0c;而更深层次的原因是对于内核的各种机(…

计算多图的等价无向图的邻接链表表示

计算多图的等价无向图的邻接链表表示 摘要:一、引言二、算法思路三、伪代码实现四、C代码实现五、算法分析六、结论摘要: 在图论中,多图(Multigraph)是一种允许边重复以及存在自循环边(即一个顶点到其自身的边)的图。给定一个多图的邻接链表表示,本文旨在探讨如何构造…

Git 忽略已经提交的文件

对于未提交过的文件直接用ignore文件即可,不再赘述 对于已经提交过的文件,但是实际上不需要的,可以用git rm --cached命令 比如下图这个 .vsconfig被我误提交了或者忘了在ignore里添加了 但是我实际上不想要这个文件,那么在项目根目录打开git bash ,输入 git rm --cached .vsc…

分歧时间估计与被子植物的年代-文献精读43

Ad fontes: divergence-time estimation and the age of angiosperms 回归本源&#xff1a;分歧时间估计与被子植物的年代 摘要 准确的分歧时间对于解释和理解谱系演化的背景至关重要。在过去的几十年里&#xff0c;有关冠被子植物推测的分子年龄&#xff08;通常估计为晚侏罗…

RabbitMQ中的死信交换机?(RabbitMQ延迟队列有了解过吗)

延迟队列 延迟队列:进入队列的消息会被延迟消费的队列。 延迟队列死信交换机 TTL&#xff08;过期时间&#xff09; 延迟队列的使用场景:超时订单、限时优惠、定时发布 死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信(dead letter): 消费者使…

wpf prism 《1》、区域 、模块化

安装prism.DryIoc 修改app.xaml <prism:PrismApplication x:Class"WpfApp3.App"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local"clr-namespace:W…

求职Leetcode题目(9)

1.通配符匹配 题解&#xff1a; 其中&#xff0c;横轴为string s&#xff0c;纵轴为pattern p 这个表第(m,n)个格子的意义是:【p从0位置到m位置】这一整段&#xff0c;是否能与【s从0位置到n位置】这一整段匹配 也就是说&#xff0c;如果表格的下面这一个位置储存的是T(True)…

shell脚本--正则表达式

一、正则表达式的类型 在Linux中,有两种流行的正则表达式引擎: POSIX基础正则表达式(basic regular expression,BRE)引擎 POSIX扩展正则表达式(extended regular expression,ERE)引擎 POSIX BRE引擎通常出现在依赖正则表达式进行文本过滤的编程语言中。它为常见模式提供…

pytorch交叉熵损失函数

nn.CrossEntropyLoss 是 PyTorch 中非常常用的损失函数,特别适用于分类任务。它结合了 nn.LogSoftmax 和 nn.NLLLoss(负对数似然损失)的功能,可以直接处理未经过 softmax 的 logits 输出,计算预测值与真实标签之间的交叉熵损失。 1. 交叉熵损失的原理 交叉熵损失衡量的是…

cnocr 安装

打开终端 如果不会打开终端 -> 终端打开输入 pip install cnocr 执行中途可能报错 去这里下载工具&#xff1a;c构建工具下载完打开&#xff0c;勾选这个 然后点安装安装完回到第2步重新执行

前胡基因组与伞形科香豆素的进化-文献精读42

The gradual establishment of complex coumarin biosynthetic pathway in Apiaceae 伞形科中复杂香豆素生物合成途径的逐步建立 羌活基因组--文献精读-36 摘要&#xff1a;复杂香豆素&#xff08;CCs&#xff09;是伞形科植物中的特征性代谢产物&#xff0c;具有重要的药用价…

深度学习与大模型第1课环境搭建

深度学习与大模型第1课 环境搭建 1. 安装 Anaconda 首先&#xff0c;您需要安装 Anaconda&#xff0c;这是一个开源的 Python 发行版&#xff0c;能够简化包管理和环境管理。以下是下载链接及提取码&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Na2xOFpBXQMgzXA…

网络准入控制系统

当我们谈论网络准入控制系统时&#xff0c;我们谈论的并不是网络准入控制系统&#xff0c;而是安全&#xff0c;我们不能只囿于它表面的浮华而忘掉它的本质&#xff0c;记住&#xff0c;不管讨论什么&#xff0c;我们必须要有直达本质的能力。网络的本质就是安全。 网络准入控制…

TDesign 微信小程序组件库配置

文章目录 1.安装 npm 包2. 构建 npm3. 构建完成后即可使用 npm 包。4.修改 app.json5.修改 tsconfig.json6.使用组件 1.安装 npm 包 在小程序 package.json 所在的目录中执行命令安装 npm 包&#xff1a; npm install结果报错 PS C:\WeChatProjects\miniprogram-1> npm i…

【Qt】窗口概述

Qt 窗口概述 Qt窗口是由QMianWindow类来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃ QWidget 类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动窗⼝&a…

安全入门day.03

一、知识点 1、抓包技术应用意义 在渗透安全方面&#xff0c;通过抓包分析&#xff0c;安全人员可以模拟黑客的攻击行为&#xff0c;对系统进行渗透测试。这种测试有助于发现系统中存在的安全漏洞和弱点。一旦发现漏洞&#xff0c;可以立即采取措施进行修复&#xff0c;从而增…