博客
关于我
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/

    你可能感兴趣的文章
    POJ 3253 Fence Repair C++ STL multiset 可解 (同51nod 1117 聪明的木匠)
    查看>>
    Qt笔记——控件总结
    查看>>
    poj 3262 Protecting the Flowers 贪心
    查看>>
    poj 3264(简单线段树)
    查看>>
    Qt笔记——布局管理三件套分割窗口、停靠窗口和堆栈窗口
    查看>>
    poj 3277 线段树
    查看>>
    POJ 3349 Snowflake Snow Snowflakes
    查看>>
    POJ 3411 DFS
    查看>>
    poj 3422 Kaka's Matrix Travels (费用流 + 拆点)
    查看>>
    Qt笔记——官方文档全局定义(二)Functions函数
    查看>>
    POJ 3468 A Simple Problem with Integers
    查看>>
    poj 3468 A Simple Problem with Integers 降维线段树
    查看>>
    poj 3468 A Simple Problem with Integers(线段树 插线问线)
    查看>>
    poj 3485 区间选点
    查看>>
    poj 3518 Prime Gap
    查看>>
    poj 3539 Elevator——同余类bfs
    查看>>
    Qt笔记——官方文档全局定义(三)Macros宏
    查看>>
    poj 3628 Bookshelf 2
    查看>>
    Qt笔记——官方文档全局定义(一)Types数据类型
    查看>>
    POJ 3670 DP LIS?
    查看>>