#L4287. 「KTSC 2021 R2」路灯

「KTSC 2021 R2」路灯

题目描述

题目译自 2021년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T4 「가로등」

沿着一条直路有 NN 盏路灯。第 ii 盏路灯的初始高度为 AiA_{i} (1iN)(1 \leq i \leq N)。我们计划利用这些路灯架设电线。

要在第 ii 盏路灯和第 j(>i)j(>i) 盏路灯之间架设电线,需要满足以下两个条件:

  1. Ai=AjA_{i}=A_{j}(两盏路灯的高度相同)
  2. 对于所有 i<k<ji<k<jAk<AiA_{k}<A_{i}(两盏路灯之间的所有路灯高度都低于这两盏路灯)

根据管理员的判断,一些路灯的高度会被调整,这会改变可以架设电线的路灯对的情况。

QQ 次操作,每次操作会将第 xx 盏路灯的高度调整为 hh。每次调整路灯高度后,我们需要计算可以架设电线的路灯对的数量。

实现细节

你需要实现以下函数:

vector<long long int> count_cable(vector<int> A, vector< pair<int, int> > C);

  • 该函数只会被调用一次。
  • 参数 AA 的大小为 NN。数组 AA 的每个元素表示路灯的初始高度。换句话说,A[i]=Ai+1A[i]=A_{i+1} (0iN1)(0 \leq i \leq N-1)
  • 参数 CC 是一个包含 QQ 个顺序对 (x,h)(x, h) 的数组,每个顺序对 (x,h)(x, h) 表示一次将第 xx 盏路灯的高度调整为 hh 的操作。
  • 该函数返回一个大小为 Q+1Q+1 的整数数组,包含初始状态下可以架设电线的路灯对的数量,以及每次高度调整后可以架设电线的路灯对的数量。

注意,提交的代码中不应包含任何输入输出操作。

样例

考虑 A=[4,2,2,2,4,6],C=[(4,6),(6,4)]A=[4,2,2,2,4,6],C=[(4,6),(6,4)] 的情况。

C=[(4,6),(6,4)]C=[(4,6),(6,4)] 的意思是,第一次高度调整将第 44 盏路灯的高度调整为 66,第二次高度调整将第 66 盏路灯的高度调整为 44

评测程序将调用如下函数:

count_cable([4,2,2,2,4,6],[(4,6),(6,4)]);

下图展示了初始状态下 66 盏路灯可以架设电线的情况。图中显示总共可以架设 33 条电线。 下图展示了第一次高度调整后,将第 44 盏路灯的高度调整为 66 后,可以架设电线的情况。图中显示总共可以架设 22 条电线。 下图展示了第二次高度调整后,将第 66 盏路灯的高度调整为 44 后,可以架设电线的情况。图中显示总共可以架设 22 条电线。 函数 count_cable 最终应返回 [3,2,2][3,2,2]

这个样例满足除第 44 个子任务外的所有子任务的条件。

数据范围与提示

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

  • 2N1052 \leq N \leq 10^5
  • 1Q2.51051 \leq Q \leq 2.5\cdot 10^5
  • 所有路灯的高度始终是 1110910^{9} 之间的整数。
  • 对于每次操作 (x,h)(x, h)1xN1 \leq x \leq N,并且保证第 xx 盏路灯的高度会发生变化。也就是说,调整前第 xx 盏路灯的高度与 hh 不同。

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

子任务 分值 附加限制
1 5 N50N \leq 50Q100Q \leq 100
2 8 N104N \leq 10^4Q2.5104Q \leq 2.5\cdot 10^4
3 11 所有路灯的高度始终不超过 1010
4 7 所有高度调整操作都将路灯的高度降低
5 15 一旦路灯高度增加,则之后不会再降低;一旦路灯高度降低,则之后不会再增加
6 12 Q8000Q \leq 8000
7 16 高度发生变化的路灯总数不超过 80008000
8 21 N4104N \leq 4\cdot 10^4Q105Q \leq 10^5
9 55 无附加限制

输出格式

示例评测程序按以下格式读取输入:

  • 11 行:NN QQ
  • 22 行:A1A_{1} A2A_{2} \cdots ANA_{N}
  • 2+i2+i (1iQ)(1 \leq i \leq Q) 行:xix_{i} hih_{i}(xi,hi)(x_{i}, h_{i}) 表示第 ii 次高度调整操作。

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

  • 11 行:函数 count_cable 返回的数组

示例评测程序可能与实际评测程序不同。