【蓝桥每日一题]-前缀和与差分(保姆级教程 篇2)#差分序列

昨天讲的概念和模板,今天讲一个差分序列的好题(好好体会里面的优化思想):

目录

题目:

思路: 


        

题目:

手动打出样例哈
输入:                        输出:
4                                    2
3                                    13
-2 -2 -2                          36
3                                    33
10 4 7

4 -4 4 -4
5
1 -2 3 -4 5

        

思路: 

先捋一下题意:给定长n的序列现有三种操作:问至少经过多少次操作才能把所有数都变成0。一共t次询问!

操作1,选一个数ai把1~i的数都减少1
操作2,选一个数ai把i~n的数都减少1
操作3,每个数都增加1

      

很明显要用差分序列来做,不过怎么使用差分序列很考思维和技巧

    
操作1:把dif[i+1]+1,dif[1]-1
操作2:把dif[i]-1
操作3:把dif[1]+1

我们只需要对差分序列不断进行三个操作,直到变成全0即可

      
举个例子:原数列:1 -2 3 -4 5    对应制造差分:1,-3,5,-7,9
不难发现对于大于0的5,9需要减少,那就是执行操作2;

对于小于0的-3,-7执行操作1即可;

然后只剩下dif[1]了,最后执行操作3就行了

      

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int S=1<<18;
int a[S];
ll ans,dif[S];
void solve(){ans=0;int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];dif[i]=a[i]-a[i-1];//制造差分序列}for(int i=2;i<=n;i++){if(dif[i]>0)ans+=dif[i];//执行操作2else {int ab=-dif[i];ans+=ab;//执行操作1dif[1]-=ab;}}ans+=abs(dif[1]);//执行操作3cout<<ans<<'\n';
}
int main(){int t;cin>>t;while(t--) solve();return 0;
}

综上:你是不是也发现我之前说的,“差分序列多于用数据的多次变动” 的意思了吧

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

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

相关文章

MySQL -- 表的约束

MySQL – 表的约束 文章目录 MySQL -- 表的约束一、表的约束1.空属性2.默认值3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键 一、表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合 法…

Python 编写确定个位、十位以上方法及各数位的和程序

Python 编写确定数字位方法 Python 编写确定个位、十位Python 编写确定个位、十位、百位方法解析&#xff1a;Python 各数位的和程序 利用%&#xff08;取余符号&#xff09;、//&#xff08;整除&#xff09;符号。 Python 编写确定个位、十位 num 17 a num % 10 b num /…

pytorch 入门 (五)案例三:乳腺癌识别识别-VGG16实现

本文为&#x1f517;小白入门Pytorch内部限免文章 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参考文章&#xff1a;【小白入门Pytorch】乳腺癌识别&#x1f356; 原作者&#xff1a;K同学啊 在本案例中&#xff0c;我将带大家探索一下深…

2023年正版win10/win11系统安装教学(纯净版)

第一步&#xff1a;准备一个8G容量以上的U盘。 注意&#xff0c;在制作系统盘时会格式化U盘&#xff0c;所以最好准备个空U盘&#xff0c;防止资料丢失。 第二步&#xff1a;制作系统盘。 安装win10 进入windows官网 官网win10下载地址&#xff1a;https://www.microsoft.c…

OpenCV学习(六)——图像算术运算(加法、融合与按位运算)

图像算术运算 6. 图像算术运算6.1 图像加法6.2 图像融合6.3 按位运算 6. 图像算术运算 6.1 图像加法 OpenCV加法是饱和运算Numpy加法是模运算 import cv2 import numpy as npx np.uint8([250]) y np.uint8([10])# OpenCV加法 print(cv2.add(x, y)) # 25010 260 > 255…

基于springboot零食商城管理系统

功能如图所示 摘要 这基于Spring Boot的零食商城管理系统提供了强大的购物车和订单管理功能。用户可以在系统中浏览零食产品&#xff0c;并将它们添加到购物车中。购物车可以保存用户的选购商品&#xff0c;允许随时查看已选择的商品和它们的数量。一旦用户满意&#xff0c;他们…

并发编程 - 并发可见性,原子性,有序性 与 JMM内存模型

1. 并发三大特性 并发编程Bug的源头&#xff1a; 原子性 、 可见性 和 有序性 问题 1.1 原子性 一个或多个操作&#xff0c;要么全部执行且在执行过程中不被任何因素打断&#xff0c;要么全部不执行。 在 Java 中&#xff0c;对基本数据类型的变量的读取和赋值操作是原子性操…

RabbitMQ-死信交换机和死信队列

1. 简介 DLX: Dead-Letter-Exchange 死信交换器&#xff0c;死信邮箱 2.代码示例 Configuration public class RabbitConfig {final static String exchangeNormalName "exchange.dlx.normal";final static String queueNormalName "queue.dlx.normal"…

如何做好一次代码审查,什么样是一次优秀的代码审查,静态代码分析工具有哪些

代码审查是确保代码质量、提升团队协作效率、分享知识和技能的重要过程。以下是进行优秀代码审查的一些指南&#xff1a; 如何做好代码审查&#xff1a; 理解代码的背景和目的&#xff1a; 在开始审查前&#xff0c;确保你了解这次提交的背景和目的&#xff0c;这有助于更准确…

Android---Bitmap详解

每一个 Android App 中都会使用到 Bitmap&#xff0c;它也是程序中内存消耗的大户&#xff0c;当 Bitmap 使用内存超过可用空间&#xff0c;则会报 OOM。 Bitmap 占用内存分析 Bitmap 用来描述一张图片的长、宽、颜色等信息&#xff0c;可用使用 BitmapFactory 来将某一路径下…

Mac版好用的Git客户端 Fork 免激活

Fork是一款强大的Git客户端软件&#xff0c;在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具&#xff0c;可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观&#xff0c;易于使用。它提供了许多高级的Git功能&#xff0c;如分支管理、合并、提交、…