线段树

 

object IntervalTree1 extends App
{
    val score = Array(1, 2, 3, 4, 5)

    val commands = Array(
        "Q 1 5", "U 3 6", "Q 3 4",
        "Q 4 5", "U 2 9", "Q 1 5"
    )


    val (n, m) = (5, 6)
    val iTree = new IntervalTree

    var root: Tree = _
    root = iTree.build(1, n)
    //iTree.printTree(root)

    commands.foreach( cmd => {
        val tokens = cmd.split(" ")
        val (c, a, b) = (tokens(0), tokens(1).toInt, tokens(2).toInt)

        c match {
            case "Q" => println(iTree.query(root, a, b))
            case "U" => {score(a) = b; iTree.update(root, a, b)}
        }
    })


    class Tree
    {
        var l: Tree = null
        var r: Tree = null
        var lv = 0
        var rv = 0
        var maxscore = 0
    }

    class IntervalTree
    {
        var pos = 0
        var nodes = Array.fill(400010)(new Tree())


        def build(left: Int, right: Int): Tree =
        {
            val node = nodes(pos); pos += 1
            node.lv = left; node.rv = right;

            if (left == right) {
                node.maxscore = Math.max(score(left - 1), score(right - 1))
                node
            }
            else {
                val mid = (left + right) >> 1
                node.l = build(left, mid)
                node.r = build(mid + 1, right)
                node.maxscore = Math.max(node.l.maxscore, node.r.maxscore)
            }
            node
        }

        def query(root: Tree, left: Int, right: Int): Int =
        {
            if (left == root.lv && right == root.rv) return root.maxscore

            val mid = (root.lv + root.rv) >> 1
            mid match {
                case m if (right <= m) => query(root.l, left, right)
                case m if (left > m) => query(root.r, left, right)
                case _ => Math.max(query(root.l, left, mid), query(root.r, mid + 1, right))
            }
        }

        def update(root: Tree, value: Int, newValue: Int): Int =
        {
            val mid = (root.lv + root.rv) >> 1
            if (value == root.lv &&  value == root.rv) {
                root.maxscore = newValue
                return root.maxscore
            }

            val ret = mid match {
                case m if value <= m => update(root.l, value,  newValue)
                case m if value > m => update(root.r, value, newValue)
            }

            root.maxscore = Math.max(root.maxscore, ret)
            root.maxscore
        }

        def printTree(node: Tree)
        {
            if (node != null) {
                println(s"[${node.lv},${node.rv}]")
                printTree(node.l)
                printTree(node.r)
            }
        }
    }
}

  

转载于:https://www.cnblogs.com/rilley/p/3979568.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水利改革发展 中国政府高度重视水利建设,将水利作为国家基础设施建设的优先领域。政策文件强调了防洪抗旱、水资源管理、水环境保护和水生态修复等方面的全面要求,推动了水利信息化的发展。 智慧水利建设目标 智慧水利的建设目标是通过数据共享、应用惠民、应急预警等手段,打破信息孤岛,提升应急抢险协作能力,加强水利数据在惠民信息化方面的应用。同时,提出了共享联动化、解决信息安全问题、提高水利信息科技创新能力等目标。 智慧水利建设模式 智慧水利的建设模式包括构建统一平台、数据中心、信息整合平台、决策支持系统等,以实现水利、海洋、环保等政府部门和公众的信息共享和服务。此外,还包括了云计算虚拟化、网络传输、采集工程等多个方面的技术应用。 智慧水利应用实例 智慧水利的应用实例包括视频水文工程监控、多要素一体化检测设备、汛情预警智能联动、三防决策指挥、河长综合信息展示等。这些应用通过集成GIS、互联网地图服务、物联网设备等技术,实现了对水利设施的实时监控、数据分析和应急响应。 成功案例与展望 智慧水利的成功案例展示了通过视频监控、预警信息发布、移动办公信息APP等技术,有效提升了灾害应对能力、水资源管理和河长制的实施效果。这些案例表明,智慧水利的建设不仅提高了水利管理的效率和水平,也为未来的水利信息化发展提供了方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值