CF1354D.Multiset

普及+/提高

通过率:0%

时间限制:1.50s

内存限制:28MB

AC君温馨提醒

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

题目描述

Note that the memory limit is unusual.

You are given a multiset consisting of nn integers. You have to process queries of two types:

  • add integer kk into the multiset;
  • find the kk-th order statistics in the multiset and remove it.

kk-th order statistics in the multiset is the kk-th element in the sorted list of all elements of the multiset. For example, if the multiset contains elements 11, 44, 22, 11, 44, 55, 77, and k=3k = 3, then you have to find the 33-rd element in [1,1,2,4,4,5,7][1, 1, 2, 4, 4, 5, 7], which is 22. If you try to delete an element which occurs multiple times in the multiset, only one occurence is removed.

After processing all queries, print any number belonging to the multiset, or say that it is empty.

注意:内存限制较为特殊。

你被给定一个包含 nn 个整数的多重集(multiset)。你需要处理两类查询:

  • 将整数 kk 加入该多重集中;
  • 在多重集中查找第 kk 小的元素(即第 kk 个顺序统计量),并将其从多重集中删除。

多重集中的第 kk 个顺序统计量,是指将该多重集所有元素按升序排列后所得列表中的第 kk 个元素。例如,若多重集包含元素 11、44、22、11、44、55、77,且 k=3k = 3,则需在排序后的列表 [1,1,2,4,4,5,7][1, 1, 2, 4, 4, 5, 7] 中找出第 33 个元素,即 22。若待删除的元素在多重集中出现多次,则仅移除其中的一个副本。

在处理完所有查询后,请输出多重集中任意一个剩余的数;若多重集为空,则说明其为空。

输入格式

The first line contains two integers nn and qq (1≤n,q≤1061 \le n, q \le 10^6) — the number of elements in the initial multiset and the number of queries, respectively.

The second line contains nn integers a1a_1, a2a_2, ..., ana_n (1≤a1≤a2≤⋯≤an≤n1 \le a_1 \le a_2 \le \dots \le a_n \le n) — the elements of the multiset.

The third line contains qq integers k1k_1, k2k_2, ..., kqk_q, each representing a query:

  • if 1≤ki≤n1 \le k_i \le n, then the ii-th query is "insert kik_i into the multiset";
  • if ki<0k_i \lt 0, then the ii-th query is "remove the ∣ki∣|k_i|-th order statistics from the multiset". For this query, it is guaranteed that ∣ki∣|k_i| is not greater than the size of the multiset.

第一行包含两个整数 nn 和 qq(1≤n,q≤1061 \le n, q \le 10^6)—— 分别表示初始多重集的元素个数和查询次数。

第二行包含 nn 个整数 a1a_1, a2a_2, ..., ana_n(1≤a1≤a2≤⋯≤an≤n1 \le a_1 \le a_2 \le \dots \le a_n \le n)—— 表示多重集中的元素。

第三行包含 qq 个整数 k1k_1, k2k_2, ..., kqk_q,每个整数对应一个查询:

  • 若 1≤ki≤n1 \le k_i \le n,则第 ii 个查询为“将 kik_i 插入多重集中”;
  • 若 ki<0k_i \lt 0,则第 ii 个查询为“从多重集中删除第 ∣ki∣|k_i| 小的元素(即第 ∣ki∣|k_i| 个顺序统计量)”。对于此类查询,保证 ∣ki∣|k_i| 不超过当前多重集的大小。

输出格式

If the multiset is empty after all queries, print 00.

Otherwise, print any integer that belongs to the resulting multiset.

如果执行完所有查询后多重集为空,则输出 00。

否则,输出结果多重集中任意一个整数。

输入输出样例

  • 输入#1

    5 5
    1 2 3 4 5
    -1 -1 -1 -1 -1

    输出#1

    0
  • 输入#2

    5 4
    1 2 3 4 5
    -5 -1 -3 -1

    输出#2

    3
  • 输入#3

    6 2
    1 1 1 2 3 4
    5 6

    输出#3

    6

说明/提示

In the first example, all elements of the multiset are deleted.

In the second example, the elements 55, 11, 44, 22 are deleted (they are listed in chronological order of their removal).

In the third example, 66 is not the only answer.

在第一个例子中,多重集的所有元素均被删除。

在第二个例子中,元素 55、11、44、22 被删除(按其被删除的时间顺序列出)。

在第三个例子中,66 并非唯一答案。

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

首页