CF1491A.K-th Largest Value

入门

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

You are given an array aa consisting of nn integers. Initially all elements of aa are either 00 or 11. You need to process qq queries of two kinds:

  • 1 x : Assign to axa_x the value 1−ax1 - a_x.
  • 2 k : Print the kk-th largest value of the array.

As a reminder, kk-th largest value of the array bb is defined as following:

  • Sort the array in the non-increasing order, return kk-th element from it.

For example, the second largest element in array [0,1,0,1][0, 1, 0, 1] is 11, as after sorting in non-increasing order it becomes [1,1,0,0][1, 1, 0, 0], and the second element in this array is equal to 11.

给你一个包含 nn 个整数的数组 aa。初始时,aa 的所有元素均为 00 或 11。你需要处理 qq 个查询,查询分为以下两种类型:

  • 1 x:将 axa_x 的值赋为 1−ax1 - a_x。
  • 2 k:输出该数组中第 kk 大的值。

需要提醒的是,数组 bb 的第 kk 大值定义如下:

  • 将数组按非递增顺序排序,返回排序后数组中的第 kk 个元素。

例如,数组 [0,1,0,1][0, 1, 0, 1] 中第二大的元素为 11,因为将其按非递增顺序排序后得到 [1,1,0,0][1, 1, 0, 0],该数组中第二个元素即为 11。

输入格式

The first line contains two integers nn and qq (1≤n,q≤1051 \le n, q \le 10^5) — the length of the given array and the number of queries.

The second line contains nn integers a1,a2,a3,…,ana_1, a_2, a_3, \dots, a_n (0≤ai≤10 \le a_i \le 1) — elements of the initial array.

Each of the following qq lines contains two integers. The first integer is tt (1≤t≤21 \le t \le 2) — the type of query.

  • If t=1t = 1 the second integer is xx (1≤x≤n1 \le x \le n) — the position of the modified number. You have to assign to axa_x the value 1−ax1 - a_x.
  • If t=2t = 2 the second integer is kk (1≤k≤n1 \le k \le n) — you need to print the kk-th largest value of the array.

It's guaranteed that there will be at least one query of the second type (satisfying t=2t = 2).

第一行包含两个整数 nn 和 qq(1≤n,q≤1051 \le n, q \le 10^5)—— 分别表示给定数组的长度和查询次数。

第二行包含 nn 个整数 a1,a2,a3,…,ana_1, a_2, a_3, \dots, a_n(0≤ai≤10 \le a_i \le 1)—— 表示初始数组的元素。

接下来的 qq 行,每行包含两个整数。第一个整数为 tt(1≤t≤21 \le t \le 2)—— 表示查询类型。

  • 若 t=1t = 1,则第二个整数为 xx(1≤x≤n1 \le x \le n)—— 表示待修改元素的位置。你需要将 axa_x 的值赋为 1−ax1 - a_x。
  • 若 t=2t = 2,则第二个整数为 kk(1≤k≤n1 \le k \le n)—— 你需要输出数组中第 kk 大的值。

保证至少存在一个类型为 22(即满足 t=2t = 2)的查询。

输出格式

For each query of the second type, print a single integer — the answer to the query.

对于每个第二类查询,输出一个整数——该查询的答案。

输入输出样例

  • 输入#1

    5 5
    1 1 0 1 0
    2 3
    1 2
    2 3
    2 1
    2 5

    输出#1

    1
    0
    1
    0

说明/提示

Initially a=[1,1,0,1,0]a = [1, 1, 0, 1, 0].

The first operation is printing the third largest value, which is 11.

The second operation is assigning a2a_2 the value 00, aa becomes [1,0,0,1,0][1, 0, 0, 1, 0].

The third operation is printing the third largest value, it is 00.

The fourth operation is printing the first largest value, it is 11.

The last operation is printing the fifth largest value, it is 00.

初始时 a=[1,1,0,1,0]a = [1, 1, 0, 1, 0]。

第一次操作是输出第三大的值,结果为 11。

第二次操作是将 a2a_2 赋值为 00,此时 aa 变为 [1,0,0,1,0][1, 0, 0, 1, 0]。

第三次操作是输出第三大的值,结果为 00。

第四次操作是输出第一大的值,结果为 11。

最后一次操作是输出第五大的值,结果为 00。

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

首页