#loj5618. 「KTSC 2026 R1」平衡序列

「KTSC 2026 R1」平衡序列

AdditionalFile5618.zip

#5618. 「KTSC 2026 R1」平衡序列

标签: 传统 | 时间限制: 4000 ms | 内存限制: 1024 MiB |

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 17 及以上)

请在提交源代码前添加 #include "balance.h"

题目描述

题目译自 2026년도 국제정보올림피아드 대표학생 선발고사 - 1차 선발고사 T1 「균형잡힌 수열

我们将符合以下条件的序列定义为平衡序列

  • 长度为 11 的所有序列都是平衡序列。
  • 长度为 2k+12k+1 的序列 S=[S0,,S2k]S = [S_0, \ldots, S_{2k}] 如果满足以下条件,则它是平衡序列:
    • [S0,S1,,Sk1][S_0, S_1, \ldots, S_{k-1}] 是平衡序列。
    • [Sk+1,Sk+2,,S2k][S_{k+1}, S_{k+2}, \ldots, S_{2k}] 是平衡序列。
    • SkS_k 是序列 SS 所有元素中的唯一最大值

给定一个由 NN 个整数组成的序列 AAA[ij]A[i \ldots j] 表示由序列 AA 的第 ii 个元素到第 jj 个元素构成的长度为 ji+1j-i+1 的序列。例如,当 A=[3,5,7,2,9]A = [3, 5, 7, 2, 9] 时,A[13]A[1 \ldots 3][5,7,2][5, 7, 2],而 A[44]A[4 \ldots 4][9][9]

系统将给出 QQ 个查询。每个查询都是修改序列中特定元素的操作,且这些操作是累加的。在初始状态以及每次查询执行后,请你求出满足 0ijN10 \leq i \leq j \leq N-1A[ij]A[i \ldots j] 为平衡序列的整数对 (i,j)(i, j) 的总数。

实现细节

你需要实现以下函数:

long long initialize(int N, vector<int> A)
  • NN:序列 AA 的长度。
  • AA:长度为 NN 的整数数组。
  • 该函数应返回满足 0ijN10 \leq i \leq j \leq N-1A[ij]A[i \ldots j] 为平衡序列的整数对 (i,j)(i, j) 的总数。
  • 该函数仅在初期被调用一次。
long long update_sequence(int p, int v)
  • 该函数表示将 A[p]A[p] 的值修改为 vv 的查询。
  • 该函数应返回 A[p]A[p] 修改后,满足 0ijN10 \leq i \leq j \leq N-1A[ij]A[i \ldots j] 为平衡序列的整数对 (i,j)(i, j) 的总数。
  • 该函数将在调用 initialize 函数之后被调用共 QQ 次。

在提交的源代码中,你不应在任何地方执行输入或输出函数。

样例 1

假设 N=4,Q=0,A=[1,1,1,1]N=4, Q=0, A=[1, 1, 1, 1]。 评测程序将调用如下函数:

initialize(4, [1, 1, 1, 1])

由于 A[ij]A[i \ldots j] 为平衡序列的 (i,j)(i, j) 列表仅为 (0,0),(1,1),(2,2),(3,3)(0,0), (1,1), (2,2), (3,3),因此应返回 44

样例 2

假设 N=12,Q=0,A=[8,9,7,9,2,3,2,8,4,6,2,6]N=12, Q=0, A=[8, 9, 7, 9, 2, 3, 2, 8, 4, 6, 2, 6]。 评测程序将调用如下函数:

initialize(12, [8, 9, 7, 9, 2, 3, 2, 8, 4, 6, 2, 6])

该函数调用应返回 1818

样例 3

假设 N=7,Q=2,A=[1,3,4,4,2,1,6]N=7, Q=2, A=[1, 3, 4, 4, 2, 1, 6]。 评测程序将按顺序调用如下函数:

initialize(7, [1, 3, 4, 4, 2, 1, 6])
update_sequence(3, 1)
update_sequence(3, 2)

这些函数调用应依次返回 7,9,87, 9, 8

数据范围与提示

对于所有输入数据,满足:

  • 1N1051 \leq N \leq 10^{5}
  • 0Q1050 \leq Q \leq 10^{5}
  • 对于所有 ii,满足 1A[i]1091 \leq A[i] \leq 10^{9} (0iN1)(0 \leq i \leq N-1)
  • 对于所有 update_sequence 的调用,满足 0pN1,1v1090 \leq p \leq N-1, 1 \leq v \leq 10^{9}

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 33 Q=0Q = 0AA 本身是一个平衡序列
22 55 Q=0Q = 0A[i]3A[i] \leq 3
33 1212 A[i]3A[i] \leq 3v3v \leq 3
44 1818 Q=0Q = 0N2000N \leq 2000
55 2626 Q10Q \leq 10
66 3636 无附加限制

示例评测程序

示例评测程序的输入格式如下:

  • 第一行:N QN \ Q
  • 第二行:A[0] A[1]  A[N1]A[0] \ A[1] \ \ldots \ A[N-1]
  • 对于每个 1kQ1 \leq k \leq Q
    • 2+k2+k 行:p vp \ v(第 kkupdate_sequence 的参数)

示例评测程序按以下格式输出答案:

  • 第一行:initialize 的返回值
  • 对于每个 1kQ1 \leq k \leq Q
    • 1+k1+k 行:第 kkupdate_sequence 的返回值