zoukankan      html  css  js  c++  java
  • RAM——[HAOI2007]理想的正方形

    题目:[HAOI2007]理想的正方形

    描述:

    【问题描述】

    有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。

    【输入】:

    第一行为3个整数,分别表示a,b,n的值
    第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。

    【输出】:

    仅一个整数,为a*b矩阵中所有“n*n正方形区域中的最大整数和最小整数的差值”的最小值。

    【输入样例】
    5 4 2
    1 2 5 6
    0 17 16 0
    16 17 2 1
    2 10 2 1
    1 2 2 2

    【输出样例】
    1

    【数据范围】

    (1)矩阵中的所有数都不超过1,000,000,000


    (2)20%的数据2<=a,b<=100,n<=a,n<=b,n<=10


    (3)100%的数据2<=a,b<=1000,n<=a,n<=b,n<=100

          这道题是一个很明显的RMQ,关键在于怎么处理。以下是详细解析:

              思路一:暴力。       期望得分:20

                    从数据范围来看,20分直接弃疗……

              思路二:线段树。    期望得分:20

                    用二维线段树来处理也是一个不错的思路,但是数据较大,所以在最后8个点会被卡的非常厉害,仍然跟暴力没太大区别,同样20分弃疗。

              思路三:一维RMQ   期望得分:20

                    虽然在线段树上改进了不少,是求区间最值的正统方法,但是由于没有扩展到一维,所以只能在枚举左上方顶点位置时,还要再次计算以下各列的最值,所以效率很低,也只能拿到20分。(综合以上三个分析来看,在不用拓展或很高级的算法前,对于类似较难的题目,直接暴力吧,即省时间,分数又跟其他算法拉不开…………)

              思路四:二维RMQ   期望得分:100

                    这个是绝对的重点,让RMQ从一维拓展到二维,在效率带来明显的提升!详细解析参看下一篇博文:浅谈二维RMQ

  • 相关阅读:
    Ruby系列:玩转闭包(Block,Proc,lambda)
    C# 中where关键字【MSDN】
    web应用程序中慎用static变量
    面向对象的javascript(一)
    原型模式 对象深浅复制
    存储过程:异地备份数据库文件
    正则表达式 [笔记]
    连接Oracle数据库代码
    在Eclipse下搭建Android开发环境教程,HelloWord
    Android开发之旅:环境搭建及HelloWorld
  • 原文地址:https://www.cnblogs.com/zhtjtcz/p/5038711.html
Copyright © 2011-2022 走看看