码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 树状数组&线段树 的奇妙用法


    树状数组&线段树 的奇妙用法

    树状数组只支持单点加,前缀查询,那么不妨通过一些奇妙的途径转化树状数组的性质(因为常数巨小)。

    代码和数组定义如下:

    I s[maxn],n;//n 为树状数组值域最大值
    void pls(I x,I y){
        for(;x<=n;x+=x&-x)s[x]+=y;
    }I sum(I x){
        I ans=0;
        for(;x;x-=x&-x)ans+=s[x];
        return ans;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.区间加,单点查询

    树状数组维护差分数组即可。区间 [ l , r ] [l,r] [l,r] 加 k k k ,就只需给 l l l 位置加上 k k k , r + 1 r+1 r+1 位置加上 k k k ;单点查询的时候就查询 [ 1 , x ] [1,x] [1,x] 的前缀和即可。

    2.区间加,区间求和

    从上一个思路出发开始乱搞(虽然线段树秒杀,但是还是有点常数而且结构上可能会有问题不好找)、

    我们设 c [ i ] c[i] c[i] 为差分数组,区间求和目标就是 ∑ i = l r ∑ j = 1 i c [ j ] \sum\limits_{i=l}^r \sum\limits_{j=1}^i c[j] i=l∑r​j=1∑i​c[j] 。

    发现不太好直接求解,于是转化成 [ 1 , r ] [1,r] [1,r] 的和减去 [ 1 , l − 1 ] [1,l-1] [1,l−1] 的和。这里以 [ 1 , r ] [1,r] [1,r] 的求和为例。

    原式= ∑ i = 1 r ∑ j = 1 i c [ j ] \sum\limits_{i=1}^r\sum\limits_{j=1}^i c[j] i=1∑r​j=1∑i​c[j] ,交换主体,可得 j j j 能够取 [ 1 , r ] [1,r] [1,r] 之中所有数,而每个 j j j 出现了 r − j + 1 r-j+1 r−j+1 次。

    式子就变成了 ∑ j = 1 r c [ j ] × ( r − j + 1 ) \sum\limits_{j=1}^r c[j]\times (r-j+1) j=1∑r​c[j]×(r−j+1) 。把可控的部分分离出来,得到 ( r + 1 ) × ∑ j = 1 r c [ j ] − ∑ j = 1 r j × c [ j ] (r+1)\times \sum\limits_{j=1}^r c[j] -\sum\limits_{j=1}^r j\times c[j] (r+1)×j=1∑r​c[j]−j=1∑r​j×c[j] 。

    所以维护两个数组,一个 c [ j ] c[j] c[j] ,一个 c [ j ] × j c[j]\times j c[j]×j 即可。

  • 相关阅读:
    【项目】GZIP压缩项目详解 (LZ77+Huffman编码)
    寒武纪“动荡”的 6 周年:CTO 梁军离职,市值蒸发 59 亿,核心技术人才仅剩 3 人
    高等代数(邱维声)课程笔记:目录
    2023年【危险化学品经营单位安全管理人员】考试题及危险化学品经营单位安全管理人员模拟试题
    攻防世界-web-ics-05
    P4769 [NOI2018] 冒泡排序(组合数学)
    .NET 服务 ServiceController
    基于51单片机温度火灾烟雾报警器程序仿真资料
    文件上传漏洞-upload靶场13-16关 (图片木马-文件包含与文件上次漏洞)
    faiss-gpu安装失败
  • 原文地址:https://blog.csdn.net/STJqwq/article/details/126336507
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号