zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 203 (Sponsored by Panasonic)

    D - Pond

    题目

    简要题意

    有一张 (n imes n) 的方格,((i,j)) 格子上的数字为 (a_{i,j})。你需要在这张方格里找到一个 (k imes k) 的方格使得中位数最小。

    中位数定义为数字第 (lfloor frac{k^2}{2} floor+1) 大的格子。

    数据范围与提示

    (1le kle nle 800, a_{i,j}le 1e9)

    解法

    看到 “中位数“,”最小“ 就自然地转化到二分。

    二分最小中位数,我们可以进行 (mathcal O(n^2)) 的判断:先对于数字大于 ( m mid) 的数的个数进行二维前缀和,然后枚举 (k imes k) 的方格左上角,计算出这个方格中数字大于 ( m mid) 的数的个数 (tmp)。容易发现,如果所有方格的 (tmp) 最小值小于 (lfloor frac{k^2}{2} floor+1) 就意味着 ( m mid) 可能是一个合法解,我们将 (rleftarrow m mid)。否则将 (l leftarrow ext{mid}+1)

    时间复杂度 (mathcal O(n^2 log a))

  • 相关阅读:
    iphone自动识别电话以及变色的解决
    chrome浏览器模拟微信
    获取一个图片的真实宽高
    iview插件
    vue aixos请求json
    ajax请求文件流下载
    检测打开设备
    轮播图
    rem适配
    easyui月份插件如何监听
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/14846030.html
Copyright © 2011-2022 走看看