算法提高之楼兰图腾(树状数组)

news/2024/7/5 3:15:29

楼兰图腾(树状数组)

  • 核心算法:树状数组

    • 将下标转化为二进制 例如11100100 父节点下标x 子节点下标i
      • 由下图可知 每一个数都可以由其子节点**(如果有)**求和得到
      • **由父节点找子节点:**每个子节点下标 –> x – 1 – lowbit(x – 1)
      • 由子节点找父节点: i + lowbit(i)
    • 在这里插入图片描述
  •   #include <cstdio>
      #include <cstring>
      #include <iostream>
      #include <algorithm>
      
      using namespace std;
      typedef long long LL;
      const int N = 200010;
      
      int Greater[N],lower[N];
      int a[N];
      int tr[N];
      int n;
      
      int lowbit(int x)
      {
          return x&-x;  //取最后一位1
      }
      
      void add(int x,int c)
      {
          for(int i=x;i<=n;i += lowbit(i)) tr[i] += c;  //在每一个父节点上都加上c
      } 
      
      int sum(int x)
      {
          int res=0;
          for(int i=x;i;i -= lowbit(i)) res+=tr[i];  //所有子节点求和
          return res;
      }
      
      int main()
      {
          cin>>n;
          for(int i=1;i<=n;i++) cin>>a[i];
          
          for(int i=1;i<=n;i++)
          {
              int y = a[i];
              Greater[i] = sum(n) - sum(y);  //前缀和 求值为y-n的个数
              lower[i] = sum(y-1);  //0-(y-1)的个数
              //解释:大小为y的有1个
              add(y,1);  //值作为下标 个数作为值 存入树状数组
          }
          //清空之前的树
          memset(tr,0,sizeof tr);
          LL res1=0,res2=0;
          for(int i=n;i;i--)
          {
              int y = a[i];
              //Greater里面存的是左边大的 再求一个右边大的
              res1 += Greater[i] * (LL)(sum(n) - sum(y));  
              res2 += lower[i] * (LL)(sum(y-1));
              //一样的操作建树
              add(y,1);
          }
          cout<<res1<<" "<<res2;
      }
    

参考题解:https://www.acwing.com/solution/content/110791/


http://lihuaxi.xjx100.cn/news/2092912.html

相关文章

2024考研计算机考研复试-每日重点(第十九期)

公众号“准研计算机复试”&#xff0c;超全大佬复试资料&#xff0c;保姆级复试&#xff0c;80%的题目都是上岸大佬提供的。 研宝们&#xff0c;App更新啦&#xff01; 操作系统&#xff1a; 10.★什么是中断&#xff1f; 中断是指计算机运行过程中&#xff0c;出现某些意外时…

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面&#xff0c;对需求总是轻描淡写&#xff0c;比如&#xff1a;换个颜色、换个图标、换个皮肤&#xff0c;甚至还有的说&#xff0c;随便改下就行。 这些需求都是听起来简单&#xff0c;实现起来难&#xff0c;你如…

从零开始学习深度学习库-2:反向传播

欢迎来到本系列的第二篇文章&#xff0c;我们将从头开始构建一个深度学习库。 本博客系列的代码可以在这个Github仓库中找到。 上一篇文章 在上一篇文章中&#xff08;链接见这里&#xff09;&#xff0c;我们实现了线性层和常见的激活函数&#xff0c;并成功构建了神经网络的…

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕 硬件平台 AT32A403A Board开发板 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 推荐一个屏幕资料参考网站 http://www.lcdwiki.com/1.28inch_IPS_Module 1.28寸圆形IPS彩屏&…

【 JS 】从 ECMAScript 规范解读 this

“无论你面对怎样的挑战&#xff0c;记住心中的那团火焰&#xff0c;它将点燃你前进的道路&#xff0c;引领你走向成功的彼岸。” 在 “执行上下文栈” 中讲到&#xff0c;当JavaScript代码执行一段可执行代码(executable code)时&#xff0c;会创建对应的执行上下文(execution…

HTML静态网页成品作业(HTML+CSS)——电影肖申克的救赎介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

最新ChatGPT支持下的PyTorch机器学习与深度学习

近年来&#xff0c;随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术&#xff0c;在许多行业都取得了颠覆性的成果。另外&#xff0c;近年来&#xff0c;Pytorch深度学习框架受…

Vulnhub - Morpheus

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Morpheus 靶机下载地址&#xff1a;Matrix-Breakout: 2 Morpheus ~ VulnHub 0x01 信息收集 Nmap扫描…