#P15589. [KTSC 2026] 瞭望塔 / Observation Tower

    ID: 17551 远端评测题 6000ms 2048MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>交互题2026KTSC(韩国)

[KTSC 2026] 瞭望塔 / Observation Tower

题目描述

有 NN 座瞭望塔,依次编号 0∼N−10\sim N-1。塔 ii 的高度为 H[i]H[i],其瞭望分数为 S[i]S[i]。初始,S[i]=0S[i]=0。

对于 0≤i<j≤N−10\le i\lt j\le N-1,我们称塔 jj 能从塔 ii 瞭望到,当且仅当对于任意 i≤k≤j−1i\le k\le j-1,都有 H[k]<H[j]H[k]\lt H[j]。注意,j≤ij\le i 时,塔 jj 不能从塔 ii 瞭望到。

当从某座塔上执行一次瞭望操作时,能从这座塔瞭望到的所有塔的瞭望分数都会自增 11。

现在有 QQ 个事件,每个事件是如下的三个类型之一:

  • 瞭望:给定 II(0≤I≤N−20\le I\le N-2),在塔 II 上执行一次瞭望操作。
  • 测量:给定 L,RL,R(0≤L≤R≤N−10\le L\le R\le N-1),计算 S[L]+⋯+S[R]S[L]+\cdots+S[R]。
  • 平移:给定 L,R,VL,R,V(0≤L≤R≤N−10\le L\le R\le N-1)。对于任意 L≤i≤RL\le i\le R,令 H[i]←H[i]+VH[i]\gets H[i]+V

瞭望事件用数组 [I][I] 表示;测量事件用数组 [L,R][L,R] 表示;平移事件用数组 [L,R,V][L,R,V] 表示。注意到这三类事件的数组大小均不同,所以可以用数组大小区分不同的事件类型。

事件按照 0∼Q−10\sim Q-1 的顺序依次发生,事件 ii 用 E[i]E[i] 表示。

令测量事件总数为 KK,按照发生顺序编号 0∼K−10\sim K-1。求出所有测量事件的结果。

实现细节

这是一道函数式交互题。你不必,也不应实现 main 函数。

你应当实现以下的函数:

vector<long long> tower_events(vector<int> H, vector<vector<int>> E)
  • HH:大小为 NN 的整数数组。
  • EE:大小为 QQ 的整数数组,表示事件。
  • 返回一个大小为 KK 的整数数组 XX,其中 X[i]X[i] 表示第 ii 个测量事件的结果。
  • 该函数被调用恰好一次。

输入格式

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

  • 第 11 行:NN QQ
  • 第 22 行:H[0]H[0] H[1]…H[N−1]H[1] \dots H[N - 1]
  • 对于所有 0≤i≤Q−10 \le i \le Q - 1:
    • 第 3+i3 + i 行:∣E[i]∣|E[i]| E[i][0]…E[i][∣E[i]∣−1]E[i][0] \dots E[i][|E[i]| - 1]

输出格式

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

  • 对于所有 0≤i≤K−10 \le i \le K - 1:
    • 第 1+i1 + i 行:X[i]X[i]
5 5
1 2 3 4 5
1 0
2 1 3
3 1 2 1
1 1
2 0 4

3
6

10 11
7 7 9 5 8 10 2 9 2 2
1 1
3 6 8 6
1 1
2 1 9
1 3
1 8
2 2 4
1 5
3 1 1 7
1 1
2 0 9

5
3
10

提示

数据范围

  • 5≤N≤1 000 0005\le N\le 1\, 000\, 000;
  • 1≤Q≤250 0001\le Q\le 250\, 000;
  • 1≤H[i]≤1091\le H[i]\le 10^9;
  • 对于瞭望事件,0≤I≤N−20\le I\le N-2;
  • 对于测量事件,0≤L≤R≤N−10\le L\le R\le N-1;
  • 对于平移事件,0≤L≤R≤N−10\le L\le R\le N-1,−109≤V≤109-10^9\le V\le 10^9;
  • 在平移事件发生后,保证 H[i]≥1H[i]\ge 1;
  • 至少有一个测量事件。

子任务

编号 得分 限制
11 1717 N,Q≤150 000N,Q\le 150\, 000;在所有测量事件中,L=0,R=N−1L=0,R=N-1
22 6 6 N,Q≤150 000N,Q\le 150\, 000;无平移事件
33 1212 N,Q≤150 000N,Q\le 150\, 000
44 1919 在所有瞭望事件中,I=0I=0;在所有平移事件中,L=RL=R;平移事件至多发生 30 00030\, 000 次
55 2121 在所有测量事件中,L=RL=R;在所有平移事件中,L=RL=R 且 V≥0V\ge 0
66 2525 无额外限制

样例

样例 11

考虑以下调用:

tower_events([1, 2, 3, 4, 5], [[0], [1, 3], [1, 2, 1], [1], [0, 4]])
  • 在第一个事件之后,H=[1,2,3,4,5]H = [1, 2, 3, 4, 5],S=[0,1,1,1,1]S = [0, 1, 1, 1, 1]。
  • 第二个事件(即测量事件 00)的结果为 S[1]+S[2]+S[3]=3S[1] + S[2] + S[3] = 3。
  • 在第三个事件之后,H=[1,3,4,4,5]H = [1, 3, 4, 4, 5],S=[0,1,1,1,1]S = [0, 1, 1, 1, 1]。
  • 在第四个事件之后,H=[1,3,4,4,5]H = [1, 3, 4, 4, 5],S=[0,1,2,1,2]S = [0, 1, 2, 1, 2]。
  • 最后一个事件(即测量事件 11)的结果为 S[0]+⋯+S[4]=6S[0] + \cdots + S[4] = 6。

因此,该函数应返回 [3,6][3, 6]。

样例 22

考虑以下调用:

tower_events([7, 7, 9, 5, 8, 10, 2, 9, 2, 2], [[1], [6, 8, 6], [1], [1, 9], [3], [8], [2, 4], [5], [1, 1, 7], [1], [0, 9]])

该函数应返回 [5,3,10][5, 3, 10]。