码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【蓝桥每日一题]-前缀和与差分(保姆级教程 篇2)#差分序列


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

    目录

    题目:

    思路: 


             

           

    题目:

    手动打出样例哈
    输入:                        输出:
    4                                    2
    3                                    13
    -2 -2 -2                          36
    3                                    33
    10 4 7
    4 
    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就行了

          

    1. #include
    2. using namespace std;
    3. typedef long long ll;
    4. const int S=1<<18;
    5. int a[S];
    6. ll ans,dif[S];
    7. void solve(){
    8. ans=0;
    9. int n;cin>>n;
    10. for(int i=1;i<=n;i++){
    11. cin>>a[i];
    12. dif[i]=a[i]-a[i-1];//制造差分序列
    13. }
    14. for(int i=2;i<=n;i++){
    15. if(dif[i]>0)ans+=dif[i];//执行操作2
    16. else {
    17. int ab=-dif[i];
    18. ans+=ab;//执行操作1
    19. dif[1]-=ab;
    20. }
    21. }
    22. ans+=abs(dif[1]);//执行操作3
    23. cout<'\n';
    24. }
    25. int main(){
    26. int t;cin>>t;
    27. while(t--) solve();
    28. return 0;
    29. }

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

  • 相关阅读:
    从0到1,申请cos服务器并上传图片到cos文件服务器
    图的遍历—图的DFS—反向建边;
    【机器学习】手写数字识别
    基于java+android+SQLite的保健型果饮在线销售APP设计
    SQL分页查询,SQL的LIMIT语句用法,SQL如何实现分页查询,SpringBoot实现分页查询。
    思腾云计算
    深度剖析 ZooKeeper 核心原理
    Spark lazy list files 的实现
    「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具
    C语言试题124之给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字
  • 原文地址:https://blog.csdn.net/m0_69478376/article/details/134096213
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号