CF1476G Minimum Difference

题目描述

给定一个大小为 $n$ 的整数数组 $a$。 你需要进行 $m$ 次操作。每次操作有两种类型: - “$1$ $l$ $r$ $k$”——计算最小的 $dif$,使得存在 $k$ 个互不相同的整数 $x_1, x_2, \dots, x_k$,满足对于每个 $i \in [1, k]$,都有 $cnt_i > 0$,且对于任意 $i, j \in [1, k]$,都有 $|cnt_i - cnt_j| \le dif$,其中 $cnt_i$ 表示 $x_i$ 在子数组 $a[l..r]$ 中出现的次数。如果无法选择 $k$ 个不同的整数,输出 $-1$。 - “$2$ $p$ $x$”——将 $a_p$ 赋值为 $x$。

输入格式

第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le 10^5$),分别表示数组 $a$ 的大小和操作次数。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 10^5$)。 接下来的 $m$ 行,每行表示一次操作,格式如下: - “$1$ $l$ $r$ $k$” ($1 \le l \le r \le n; 1 \le k \le 10^5$) - “$2$ $p$ $x$” ($1 \le p \le n; 1 \le x \le 10^5$) 保证至少有一次第一类操作。

输出格式

对于每个第一类操作,输出满足条件的最小 $dif$,如果无法选择 $k$ 个不同的整数,则输出 $-1$。

说明/提示

由 ChatGPT 4.1 翻译