CF526E Transmitting Levels

题目描述

优化通过网络传输的数据量是开发任何网络应用中的一个重要且有趣的部分。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF526E/a78fce818bfb1b716eb4c13dcdfd873c3aac4f4e.png) 在 ZeptoLab 公司深处开发的一款秘密游戏中,游戏宇宙由 $ n $ 个关卡组成,这些关卡呈环状排列。你可以从第 $ i $ 个关卡到达第 $ i-1 $ 和第 $ i+1 $ 个关卡,也可以从第 $ 1 $ 关到达第 $ n $ 关,反之亦然。第 $ i $ 个关卡的描述大小为 $ a_{i} $ 字节。 为了减少传输流量,游戏按如下方式获取关卡:服务器上的所有关卡被分成 $ m $ 个组,每当玩家首次进入某一组的任意关卡时,服务器会将该组中的所有关卡作为一个数据包发送给游戏客户端。因此,玩家在一个组内移动关卡时,应用无需获取新的信息。由于技术限制,数据包可以包含任意数量的关卡,但它们的总大小不得超过 $ b $ 字节,其中 $ b $ 为某个正整数常量。 通常情况下,玩家会依次完成关卡,因此决定将 $ n $ 个关卡分成 $ m $ 个组,使得每个组都是若干相邻关卡组成的连续片段(组也可以包含环上的两个相邻关卡 $ n $ 和 $ 1 $)。具体来说,如果所有关卡的描述总大小不超过 $ b $ 字节,则它们都可以作为一个组、在一个数据包中发送。 请确定,为了满足上述条件,最少需要多少个组才能组织游戏关卡? 由于游戏开发周期较长、技术也不断进步,目前无法准确预测上线时数据包大小限制常量 $ b $ 的具体值。因此,开发者希望你为多个不同的 $ b $ 值分别计算答案。

输入格式

第一行包含两个整数 $ n $、$ q $($ 2 \leq n \leq 10^6 $,$ 1 \leq q \leq 50 $)——分别表示游戏关卡数量和需要处理的不同 $ b $ 数量。 第二行包含 $ n $ 个整数 $ a_{i} $($ 1 \leq a_{i} \leq 10^9 $)——各关卡的大小(字节数)。 接下来 $ q $ 行,每行包含一个整数 $ b_{j} $,表示每组最大允许的字节数($ b_j \geq \max a_{i} $)。

输出格式

对输入中的每个 $ b_j $,输出一行一个整数 $ m_j $($ 1 \leq m_j \leq n $),表示将游戏关卡分组,传输时所需的最少组数。

说明/提示

比如样例中的情况可以如下分组: - 当 $ b=7 $ 时,可以分为两个片段:$ 2|421|32 $(注意其中有一组是第 5、6、1 个关卡组成的环形片段); - 当 $ b=4 $ 时,可以分为四个片段:$ 2|4|21|3|2 $; - 当 $ b=6 $ 时,可以分为三组:$ 24|21|32| $。 由 ChatGPT 5 翻译