1 条题解

  • 0
    @ 2025-8-24 21:16:06

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar RyanLi
    跟着光,靠近光,成为光,散发光。

    搬运于2025-08-24 21:16:05,当前版本为作者最后更新于2024-03-10 20:36:48,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source & Knowledge

    2024 年 3 月语言月赛,由洛谷网校入门计划/基础计划提供。

    题目大意

    有一个数组 aa,需要进行 qq 次操作。每次操作给定 xxyy 两个数,你需要将数组 aa 中的第 xx 个数修改为 yy

    求完成所有操作后数组中大于等于 VV 的数的个数。

    题目分析

    我们在读入数组 aa 时,定义一个 ansans 变量记录原数组中大于等于 VV 的数的个数。

    在修改时,我们只需要判断修改前的 a[x]a[x]yy,与 VV 的大小关系即可:

    • 如果修改前的 a[x]a[x] 小于 VV,并且 yy 大于等于 VV,那么意味着大于等于 VV 的数多了一个,就给 ansans 加上 11
    • 如果修改前的 a[x]a[x] 大于等于 VV,并且 yy 小于 VV,那么意味着大于等于 VV 的数少了一个,就给 ansans 减去 11

    完成 qq 次修改操作后直接输出 ansans 即可。

    注意到,输入的所有数字都为整数,且都不超过 C++ 中 6464 位有符号整数可表示的范围,因此需要使用 long long

    cin >> n >> q >> v;
    for (int i = 1; i <= n; ++i)
        cin >> a[i], ans += a[i] >= v;
    while (q--) {
        cin >> x >> y;
        ans += a[x] < v && y >= v;
        ans -= a[x] >= v && y < v;
        a[x] = y;
    }
    

    视频讲解

    完整代码见视频题解

    • 1

    [语言月赛 202403] 数数,数数,数数

    信息

    ID
    9833
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者