#1550. 音频处理

音频处理

题目描述

在数字音频处理中,一段录音可以通过记录每个时刻的强度值来数字化。这些强度值都是非负整数。

对于一段音频,若包含 KK 个不同的强度值,则每个强度值需要用 k=log2Kk = \lceil \log_2 K \rceil 比特(bit)来存储。因此,存储整段音频共需要 n×kn \times k 比特的空间。

为了压缩音频使其能放入有限存储空间,我们采用如下压缩方式:

选择两个整数 l,r (lr)l, r \ (l \leq r),对音频强度序列 vv 进行变换:

$$v_i = \begin{cases} v_i & \text{若 } l \leq v_i \leq r \\ l & \text{若 } v_i < l \\ r & \text{若 } v_i > r \end{cases} $$

其中,第 2、3 种情况被视为强度值被修改。

给定强度值序列 aa 和存储器大小 II 字节(1 字节 = 8 比特),请找到一组 l,rl, r,使得压缩后的音频能存入该存储器,并最小化被修改的强度值数量。

输入格式

第一行包含两个正整数 $n, I \ (1 \leq n \leq 4 \times 10^5, 1 \leq I \leq 10^8)$,分别表示音频的时刻总数和存储器大小。

第二行包含 nn 个非负整数 a1,a2,,ana_1, a_2, \dots, a_n,表示每个时刻的强度值。

输出格式

输出一个整数,表示在所有符合存储要求的压缩方案中,被修改的强度值的最小数量。

样例输入输出

样例输入 1

6 1
2 1 2 3 4 3

样例输出 1

2

样例输入 2

6 2
2 1 2 3 4 3

样例输出 2

0

样例输入 3

6 1
1 1 2 2 3 3

样例输出 3

2

部分分

  1. (10 分)n100n \leq 100I=1I = 1,所有 aia_i 均相同
  2. (20 分)n1000n \leq 1000K100K \leq 100KK 为原序列中不同强度值的数量)
  3. (30 分)n105n \leq 10^5K1000K \leq 1000
  4. (40 分)无特殊限制,需通过所有测试用例,保证所有输入在int范围内