CF1418D.Trash Problem

提高+/省选-

通过率:0%

时间限制:3.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Vova decided to clean his room. The room can be represented as the coordinate axis OXOX. There are nn piles of trash in the room, coordinate of the ii-th pile is the integer pip_i. All piles have different coordinates.

Let's define a total cleanup as the following process. The goal of this process is to collect all the piles in no more than two different xx coordinates. To achieve this goal, Vova can do several (possibly, zero) moves. During one move, he can choose some xx and move all piles from xx to x+1x+1 or x−1x-1 using his broom. Note that he can't choose how many piles he will move.

Also, there are two types of queries:

  • 00 xx — remove a pile of trash from the coordinate xx. It is guaranteed that there is a pile in the coordinate xx at this moment.
  • 11 xx — add a pile of trash to the coordinate xx. It is guaranteed that there is no pile in the coordinate xx at this moment.

Note that it is possible that there are zero piles of trash in the room at some moment.

Vova wants to know the minimum number of moves he can spend if he wants to do a total cleanup before any queries. He also wants to know this number of moves after applying each query. Queries are applied in the given order. Note that the total cleanup doesn't actually happen and doesn't change the state of piles. It is only used to calculate the number of moves.

For better understanding, please read the Notes section below to see an explanation for the first example.

沃瓦决定打扫他的房间。房间可以表示为坐标轴 OXOX。房间里有 nn 堆垃圾,第 ii 堆垃圾的坐标为整数 pip_i。所有垃圾堆的坐标互不相同。

我们定义一次“全面清理”为如下过程:该过程的目标是将所有垃圾堆收集到至多两个不同的 xx 坐标上。为达成此目标,沃瓦可以执行若干次(可能为零次)移动操作。每次操作中,他可以选择某个坐标 xx,并用扫帚将位于 xx 处的所有垃圾堆整体移动到 x+1x+1 或 x−1x-1。注意:他不能选择仅移动其中一部分垃圾堆。

此外,存在两种类型的查询:

  • 00 xx —— 从坐标 xx 处移除一堆垃圾。保证此时坐标 xx 上确实存在一堆垃圾。
  • 11 xx —— 在坐标 xx 处添加一堆垃圾。保证此时坐标 xx 上尚无垃圾堆。

注意:在某些时刻,房间中可能没有垃圾堆。

沃瓦希望知道:在任意查询执行前,若要进行一次全面清理,他最少需要花费多少次移动操作;他还希望知道在每次查询执行后,该最小移动次数是多少。查询按给定顺序依次应用。注意:“全面清理”本身并不会真实发生,也不会改变垃圾堆的状态;它仅用于计算所需的最少移动次数。

为便于理解,请参阅下方“说明”部分,其中对第一个样例进行了详细解释。

输入格式

The first line of the input contains two integers nn and qq (1≤n,q≤1051 \le n, q \le 10^5) — the number of piles in the room before all queries and the number of queries, respectively.

The second line of the input contains nn distinct integers p1,p2,…,pnp_1, p_2, \dots, p_n (1≤pi≤1091 \le p_i \le 10^9), where pip_i is the coordinate of the ii-th pile.

The next qq lines describe queries. The ii-th query is described with two integers tit_i and xix_i (0≤ti≤1;1≤xi≤1090 \le t_i \le 1; 1 \le x_i \le 10^9), where tit_i is 00 if you need to remove a pile from the coordinate xix_i and is 11 if you need to add a pile to the coordinate xix_i. It is guaranteed that for ti=0t_i = 0 there is such pile in the current set of piles and for ti=1t_i = 1 there is no such pile in the current set of piles.

输入的第一行包含两个整数 nn 和 qq(1≤n,q≤1051 \le n, q \le 10^5)——分别表示初始时房间中石堆的数量以及查询的总数。

输入的第二行包含 nn 个互不相同的整数 p1,p2,…,pnp_1, p_2, \dots, p_n(1≤pi≤1091 \le p_i \le 10^9),其中 pip_i 表示第 ii 个石堆的坐标。

接下来的 qq 行描述了各次查询。第 ii 次查询由两个整数 tit_i 和 xix_i(0≤ti≤10 \le t_i \le 1;1≤xi≤1091 \le x_i \le 10^9)给出:若 ti=0t_i = 0,表示需从坐标 xix_i 处移除一个石堆;若 ti=1t_i = 1,表示需在坐标 xix_i 处添加一个石堆。保证对于所有满足 ti=0t_i = 0 的查询,当前石堆集合中确实存在坐标为 xix_i 的石堆;而对于所有满足 ti=1t_i = 1 的查询,当前石堆集合中不存在坐标为 xix_i 的石堆。

输出格式

Print q+1q+1 integers: the minimum number of moves Vova needs to do a total cleanup before the first query and after each of qq queries.

输出 q+1q+1 个整数:Vova 在第一个查询之前以及每次 qq 个查询之后完成一次彻底清理所需的最少移动次数。

输入输出样例

  • 输入#1

    5 6
    1 2 6 8 10
    1 4
    1 9
    0 6
    0 10
    1 100
    1 50

    输出#1

    5
    7
    7
    5
    4
    8
    49
  • 输入#2

    5 8
    5 1 2 4 3
    0 1
    0 2
    0 3
    0 4
    0 5
    1 1000000000
    1 1
    1 500000000

    输出#2

    3
    2
    1
    0
    0
    0
    0
    0
    499999999

说明/提示

Consider the first example.

Initially, the set of piles is [1,2,6,8,10][1, 2, 6, 8, 10]. The answer before the first query is 55 because you can move all piles from 11 to 22 with one move, all piles from 1010 to 88 with 22 moves and all piles from 66 to 88 with 22 moves.

After the first query, the set becomes [1,2,4,6,8,10][1, 2, 4, 6, 8, 10]. Then the answer is 77 because you can move all piles from 66 to 44 with 22 moves, all piles from 44 to 22 with 22 moves, all piles from 22 to 11 with 11 move and all piles from 1010 to 88 with 22 moves.

After the second query, the set of piles becomes [1,2,4,6,8,9,10][1, 2, 4, 6, 8, 9, 10] and the answer is the same (and the previous sequence of moves can be applied to the current set of piles).

After the third query, the set of piles becomes [1,2,4,8,9,10][1, 2, 4, 8, 9, 10] and the answer is 55 because you can move all piles from 11 to 22 with 11 move, all piles from 22 to 44 with 22 moves, all piles from 1010 to 99 with 11 move and all piles from 99 to 88 with 11 move.

After the fourth query, the set becomes [1,2,4,8,9][1, 2, 4, 8, 9] and the answer is almost the same (the previous sequence of moves can be applied without moving piles from 1010).

After the fifth query, the set becomes [1,2,4,8,9,100][1, 2, 4, 8, 9, 100]. You can move all piles from 11 and further to 99 and keep 100100 at its place. So the answer is 88.

After the sixth query, the set becomes [1,2,4,8,9,50,100][1, 2, 4, 8, 9, 50, 100]. The answer is 4949 and can be obtained with almost the same sequence of moves as after the previous query. The only difference is that you need to move all piles from 5050 to 99 too.

考虑第一个例子。

初始时,石堆集合为 [1,2,6,8,10][1, 2, 6, 8, 10]。第一次查询前的答案为 55,因为你可以:将所有位于 11 的石堆移动到 22(耗时 11 步),将所有位于 1010 的石堆移动到 88(耗时 22 步),以及将所有位于 66 的石堆移动到 88(耗时 22 步)。

第一次查询后,石堆集合变为 [1,2,4,6,8,10][1, 2, 4, 6, 8, 10]。此时答案为 77,因为你可以:将所有位于 66 的石堆移动到 44(耗时 22 步),将所有位于 44 的石堆移动到 22(耗时 22 步),将所有位于 22 的石堆移动到 11(耗时 11 步),以及将所有位于 1010 的石堆移动到 88(耗时 22 步)。

第二次查询后,石堆集合变为 [1,2,4,6,8,9,10][1, 2, 4, 6, 8, 9, 10],答案保持不变(前述移动序列仍适用于当前石堆集合)。

第三次查询后,石堆集合变为 [1,2,4,8,9,10][1, 2, 4, 8, 9, 10],答案为 55,因为你可以:将所有位于 11 的石堆移动到 22(耗时 11 步),将所有位于 22 的石堆移动到 44(耗时 22 步),将所有位于 1010 的石堆移动到 99(耗时 11 步),以及将所有位于 99 的石堆移动到 88(耗时 11 步)。

第四次查询后,石堆集合变为 [1,2,4,8,9][1, 2, 4, 8, 9],答案几乎相同(前述移动序列仍适用,只是无需再移动原本位于 1010 的石堆)。

第五次查询后,石堆集合变为 [1,2,4,8,9,100][1, 2, 4, 8, 9, 100]。你可以将所有从 11 开始的石堆全部移动至 99,同时保持 100100 原地不动。因此答案为 88。

第六次查询后,石堆集合变为 [1,2,4,8,9,50,100][1, 2, 4, 8, 9, 50, 100]。答案为 4949,其移动方案与上一次查询后几乎相同,唯一区别在于:还需将所有位于 5050 的石堆也移动至 99。

输入解题思路,AI测评打分。不知道怎么写?

首页