博客
关于我
Codeforces Round #618 (Div. 1) C. Water Balance(思维+单调栈)
阅读量:393 次
发布时间:2019-03-05

本文共 560 字,大约阅读时间需要 1 分钟。

如何使数组的字典序最小

给定n个数,每次可以选择任意区间,将区间内的所有数变成平均数,目标是通过一系列操作使得整个数组的字典序最小。字典序最小意味着数组从左到右每个数尽可能小。以下是解决方案:

  • 从后往前处理:为了使前面的数尽可能小,首先处理后面的数。处理后面的数后,前面的数可能也会因为某些操作而被降低。

  • 记录区间:使用一个数组size来记录当前处理的区间。size[i]表示从i开始到某个j结束的区间。当处理到i时,size[i]的值告诉你当前处理的区间的右端点。

  • 遍历数组:从右到左遍历数组。对于每个i,计算从i到j的区间,其中j是i后面最大的处理点。然后在这个区间内计算平均值,并将所有数设置为这个平均值。同时,记录当前的区间,方便后续处理。

  • 维护size数组:在处理每个i时,更新size数组,确保每个i都知道自己处理的区间。例如,size[3]=size[6]=6,表示i=3已经和后面的数处理过了。

  • 以下是具体实现步骤:

    • 初始化size数组,size[i]=i。
    • 从n-1遍历到1:
      • 计算从i到j的区间,其中j是i后面最大的处理点。
      • 计算区间内的平均值。
      • 将区间内的所有数设置为平均值。
      • 更新size数组,记录当前的区间。

    通过这种方法,可以确保每次操作都能带来最大的降低效果,从而使得整个数组的字典序最小。

    转载地址:http://boewz.baihongyu.com/

    你可能感兴趣的文章
    POI实现Excel导出时常用方法说明
    查看>>
    POI导出Excel2003
    查看>>
    POI数据获取及坐标纠偏
    查看>>
    Quartz入门看这一篇文章就够了
    查看>>
    POI解析Excel【poi的坑——空行处理】
    查看>>
    POI:POI+JXL实现xls文件添加水印
    查看>>
    POI:POI实现docx文件添加水印
    查看>>
    POJ 1006
    查看>>
    Quartz中时间表达式的设置-----corn表达式
    查看>>
    poj 1035
    查看>>
    POJ 1061 青蛙的约会 (扩展欧几里得)
    查看>>
    Quartz2.2.1简单使用
    查看>>
    POJ 1080 Human Gene Functions(DP:LCS)
    查看>>
    Quant 开源项目教程
    查看>>
    POJ 1088 滑雪
    查看>>
    POJ 1095 Trees Made to Order
    查看>>
    POJ 1113 Wall(计算几何--凸包的周长)
    查看>>
    poj 1125Stockbroker Grapevine(最短路)
    查看>>
    Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)
    查看>>
    poj 1151 (未完成) 扫描线 线段树 离散化
    查看>>