博客
关于我
Codeforces 1199D-Welfare State【思维】
阅读量:277 次
发布时间:2019-03-01

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

数组操作问题解决方案

在这个问题中,我们需要处理一个大小为n的数组,并对它执行q次操作。操作分为两种:操作1用于修改数组中的特定位置的值,操作2用于将数组中所有小于某个值的元素修改为该值。我们的目标是根据这些操作,确定数组中每个位置的最终值。

问题分析

  • 操作类型

    • 操作1 (p, x):将数组中第p个位置的值修改为x。
    • 操作2 (x):将数组中所有小于x的元素修改为x。
  • 挑战

    • 操作2可能对多个位置产生影响,且后续的操作2可能会覆盖前面的影响。
    • 直接模拟每次操作2会导致高时间复杂度,尤其是在n很大的情况下。
  • 优化思路

    • 使用辅助数组记录操作信息:
      • last[i] 记录第i个位置最后一次被操作1修改的操作编号。
      • lastX[i] 记录第i个位置最后一次被操作1修改的值。
      • lastAllToX[i] 记录第i次操作2之后的最大x值。
  • 关键步骤

    • 处理操作1时,记录修改的位置和值。
    • 处理操作2时,记录每次操作的x值,并从后向前遍历更新最大x值。
    • 最终每个位置的值由lastX[i]lastAllToX[last[i]]中的最大值决定。
  • 解决方案代码

    #include 
    using namespace std;const int maxn = 200100;int last[maxn], lastX[maxn], lastAllToX[maxn];int main() { int n, q, op, p, x; cin >> n; for (int i = 1; i <= n; ++i) { cin >> lastX[i]; } cin >> q; for (int i = 0; i < q; ++i) { cin >> op; if (op == 1) { cin >> p >> x; last[p] = i; lastX[p] = x; } else { cin >> x; lastAllToX[i] = x; } } for (int i = q - 1; i >= 0; --i) { if (lastAllToX[i] < lastAllToX[i + 1]) { lastAllToX[i] = lastAllToX[i + 1]; } } for (int i = 1; i <= n; ++i) { int res = max(lastX[i], lastAllToX[last[i]]); cout << res << " "; } cout << endl;}

    代码解释

  • 输入处理

    • 读取数组大小n和操作次数q。
    • 初始化lastX数组,读取初始数组值。
  • 处理操作

    • 对于操作1,记录修改的位置和值。
    • 对于操作2,记录每次操作的x值。
  • 构建最大值数组

    • 从后向前遍历操作2记录,更新每个位置的最大x值。
  • 计算最终值

    • 每个位置的最终值由最后一次操作1和后续操作2的最大x值决定。
  • 这种方法确保了在处理大规模数据时的高效性,避免了直接模拟操作2对所有元素的修改,实现了时间复杂度为O(n + q)的优化。

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

    你可能感兴趣的文章
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>
    Plotly:如何处理重叠的颜色条和图例?
    查看>>
    Plotly:如何手动设置 plotly express 散点图中点的颜色?
    查看>>
    Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
    查看>>
    Plotly:如何绘制累积的“步骤“;直方图?
    查看>>
    Quartz进一步学习与使用
    查看>>
    Plotly条形图-根据正/负值更改颜色-python
    查看>>
    PLSQL developer12安装图解
    查看>>
    PLSQL Developer调试 存储过程和触发器
    查看>>
    PLSQL window操作
    查看>>
    plsql 存储过程 测试
    查看>>
    plsql 安装后database下拉没有东西
    查看>>