#P11982. [KTSC 2021] 路灯 / streetlight

    ID: 13389 远端评测题 4000ms 1024MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>2021交互题分治树链剖分虚树KOI(韩国)

[KTSC 2021] 路灯 / streetlight

题目背景

本题翻译自 2021년도 국제정보올림피아드 대표학생 선발고사 2차 선발고사 #4 가로등

警告:滥用本题评测一次即可封号。

题目描述

一条笔直的道路上竖立着 NN 盏路灯。第 ii 盏路灯的初始高度为 AiA_i1iN1 \leq i \leq N)。

现计划利用这些路灯架设电线。

若要在第 ii 盏路灯和第 jj>i> i)盏路灯之间架设电线,必须同时满足以下两个条件:

  • Ai=AjA_i = A_j(两盏路灯的高度相同)。

  • 对于所有 i<k<ji < k < j,满足 Ak<AiA_k < A_i(两盏路灯之间的所有路灯高度均低于它们)。

部分路灯的高度会根据管理者的判断进行调整,调整后可能导致电线架设条件发生变化。

“将第 xx 盏路灯的高度修改为 hh”的操作共会进行 QQ 次。每次修改后,需立即计算当前满足条件的电线架设路灯对数,并编写程序实现此功能。

实现细节

需实现以下函数:

vector<long long int> count_cable(vector<int> A, vector< pair<int, int> > C)
  • 该函数仅被调用一次。
  • 参数 AA 的大小为 NN,其元素表示路灯的初始高度。即 A[i]=Ai+1A[i] = A_{i+1}0iN10 \leq i \leq N - 1)。
  • 参数 CC 是由 QQ 个有序对 (x,h)(x, h) 构成的数组,每个有序对表示一次“将第 xx 盏路灯的高度修改为 hh”的操作。
  • 该函数需返回一个长度为 Q+1Q + 1 的整数数组,其中第一个元素为初始状态下可架设电线的路灯对数,后续元素为每次修改后的对数。

在提交的源代码中,任何位置均不得执行输入输出函数。

输入格式

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

  • 11 行:N QN \ Q
  • 22 行:A1 A2  ANA_1 \ A_2 \ \cdots \ A_N
  • 2+i2 + i 行(1iQ1 \leq i \leq Q):xi hix_i \ h_i

(xi,hi)(x_i, h_i) 表示第 ii 次修改操作。

输出格式

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

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

注意:示例评测程序与实际评测程序不同。

6 2
4 2 2 2 4 6
4 6
6 4
[3, 2, 2]

提示

约束条件

  • 2N1000002 \leq N \leq 100\,000
  • 1Q2500001 \leq Q \leq 250\,000
  • 所有路灯高度均为 1110910^9 之间的整数。
  • 在修改第 xx 盏路灯高度为 hh 的操作中,保证 1xN1 \leq x \leq N 且修改前该路灯高度不等于 hh

子任务

  1. 55 分)
    • N50N \leq 50
    • Q100Q \leq 100
  2. 88 分)
    • N10000N \leq 10\,000
    • Q25000Q \leq 25\,000
  3. 1111 分)
    • 所有路灯高度不超过 1010
  4. 77 分)
    • 所有修改操作均降低路灯高度。
  5. 1515 分)
    • 若某路灯高度曾被增加,则后续不会降低。
    • 若某路灯高度曾被降低,则后续不会增加。
  6. 1212 分)
    • Q8000Q \leq 8\,000
  7. 1616 分)
    • 高度被修改过的路灯总数不超过 80008\,000 盏。
  8. 2121 分)
    • N40000N \leq 40\,000
    • Q100000Q \leq 100\,000
  9. 5555 分)
    • 无额外约束。

评分标准

各子任务的得分为该子任务所有测试数据得分的最小值。

示例

  • A=[4,2,2,2,4,6]A = [4, 2, 2, 2, 4, 6]C=[(4,6),(6,4)]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]

    此示例满足除子任务 44 外所有子任务的条件。