首页 > 其他分享 >Scala 树状数组BIT模板

Scala 树状数组BIT模板

时间:2023-05-14 16:34:23浏览次数:40  
标签:pre index val 树状 Int Scala ans var BIT

Problem: 6404. 将数组清空

目录

Code


object Solution {
  def countOperationsToEmptyArray(nums: Array[Int]): Long = {
    val n = nums.length
    val id = Array.tabulate(n)(i => i)
    val sortedId = id.sortWith((i, j) => nums(i) - nums(j) < 0)

    var ans = n.toLong  //先把n计入答案
    val t = new BIT(n + 1)  //下标从1开始
    var pre = 1  //上一个最小值的位置,初始为1

    for (k <- sortedId.indices) {
      val i = sortedId(k) + 1 //下标从1开始
      if (i >= pre)  //从pre移动到i,跳过已经删除的数
        ans += i - pre - t.query(pre, i)
      else  //从pre移动到n,再从1移动到i,跳过已经删除的数
        ans += n - pre + i - k + t.query(i, pre - 1)
      t.inc(i) //删除i
      pre = i
    }
    ans
  }
}

//树状数组模板
class BIT(n: Int) {
  private val tree = new Array[Int](n)

  //将下标i位置的数加一
  def inc(i: Int): Unit = {
    var index = i
    while (index < tree.length) {
      tree(index) += 1
      index += index & -index
    }
  }

 //返回闭区间[1,i]的元素和
  def sum(x: Int): Int = {
    var res = 0
    var index = x
    while (index > 0) {
      res += tree(index)
      index &= index - 1
    }
    res
  }

  //返回闭区间[left,right]的元素和
  def query(left: Int, right: Int): Int = {
    sum(right) - sum(left - 1)
  }
}

标签:pre,index,val,树状,Int,Scala,ans,var,BIT
From: https://www.cnblogs.com/yhm138/p/17364986.html

相关文章

  • 树状数组--动态维护区间操作
    树状数组(二元索引树/二元下标树/BinaryIndexedTree,BIT/FenwickTree):树状数组虽名为数组,但从其英文名(BinaryIndexedTree)可看出它本质上是一种被表达为树的数据结构。对于大小为n的序列nums,最基本的树状数组以O(logn)时间复杂度同时支持如下两种操作。1)更......
  • RabbitMQ Shovel使用
    页面概览创建ShovelVirtualhost:虚拟主机Name:创建Shovel名称Source:源protocol:协议,默认AMQP0.9.1,在AMQP1.0中增加address参数url:源broker的URI。此参数指定要从哪个broker拉取消息queue:要复制的队列名称/exchange:要复制的交换机prefetch-count-消费者应获取的每个请......
  • scala模式匹配
     https://blog.csdn.net/shenlei19911210/article/details/78538255https://www.cnblogs.com/barrywxx/p/10850502.html......
  • Scala入门到放弃—02—函数
    函数方法定义def方法名(参数:参数类型):返回值类型={ //方法体 //最后一行作为返回值(不需要使用return)}defmax(x:Int,y:Int):Int={ if(x>y) x else y}packageorg.exampleobjectApp{defmain(args:Array[String]):Unit={println(a......
  • el-tree 根据多个结果筛选树状图(增加checkbox勾选)
    <template><divclass="wrapper-jjy"><el-dialogtitle="接警员查找"v-model="jjyDialogVisible":draggable="true"width="735px"height="300":close-on-click-modal="true&q......
  • Centos环境下部分中间件“rabbitmq、rocketmq、clickhouse”部署
    部分中间件部署目录部分中间件部署docker部署rabbitmqdocker部署rocketmq单机部署clickhousedocker部署rabbitmq#拉镜像dockerpullrabbitmq:3.8-management#启动dockerrun\-eRABBITMQ_DEFAULT_USER=guest\-eRABBITMQ_DEFAULT_PASS=guest\-v/data/rabbitmq/ra......
  • RabbitMQ使用详解
      RabbitMQ是基于AMQP的一款消息管理系统。AMQP(AdvancedMessageQueuingProtocol),是一个提供消息服务的应用层标准高级消息队列协议,其中RabbitMQ就是基于这种协议的一种实现。常见mq:ActiveMQ:基于JMSRabbitMQ:基于AMQP协议,erlang语言开发,稳定性好RocketMQ:基于JMS,阿里......
  • Scala 的学习
    Scala只是学习无基本理论安装Scala装前必须有jdkwindows安装解压缩D:dev/scala配置环境变量SCALA_HONEpathcmd检查Scala-version直接输入Scala控制台运行idea安装与运行Scalaidea-->插件-->scala-->安装-->重启新建maven项目catalog-->mavenarchetype-->项目......
  • bitsandbytes--Facebook 推出 8 比特优化器大大减少显存
    “小夕,小夕!又出来了个SOTA模型!赶紧follow!”小夕看了看新模型的参数量,然后看了看实验室服务器的几张小破卡。小夕,陷入了沉默。自从人们发现越大的模型性能越好后,神经网络模型的参数量就在越来越大的道路上一去不复返了。从XX-large到GPT3,再到5300亿参数的MegatronTur......
  • python 报错:TypeError: only integer scalar arrays can be converted to a scalar in
    defconvolution(initial_img,kernal):img=np.zeros((initial_img.shape[0],initial_img.shape[1])).astype(np.uint8)forxinrange(1,initial_img.shape[0]-1):foryinrange(1,initial_img.shape[1]-1):temp=np.zeros([3,3......