CF2040B.Paint a Strip

入门

通过率:0%

AC君温馨提醒

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

题目描述

你有一个长度为 nn 的数组 a1,a2,…,ana_1, a_2, \ldots, a_n,其元素全为零。

可以对该数组进行两种操作:

  1. 选择一个下标 ii(满足 1≤i≤n1 \le i \le n 且 ai=0a_i = 0),将 aia_i 设为 11;
  2. 选择一对下标 ll 和 rr(满足 1≤l≤r≤n1 \le l \le r \le n、al=1a_l = 1、ar=1a_r = 1 且 al+…+ar≥⌈r−l+12⌉a_l + \ldots + a_r \ge \lceil\frac{r - l + 1}{2}\rceil),将区间 [l,r][l, r] 中所有元素设为 11。

你的任务是计算,使数组中所有元素都变为 11,至少需要多少次第一种操作?

输入格式

输入包含多组测试用例。第一行是整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例的数量。接下来每个测试用例用一行表示,包含一个整数 nn(1≤n≤1051 \le n \le 10^5),表示数组的长度。

需要注意,所有测试用例中 nn 的总和没有限制。

输出格式

对于每组测试用例,输出一个整数,表示完成任务所需的最少第一种操作次数。

输入输出样例

  • 输入#1

    4
    1
    2
    4
    20

    输出#1

    1
    2
    2
    4

说明/提示

  • 对于第一个测试用例,你可以对 i=1i = 1 操作一次即可。

  • 对于第二个测试用例,可以按以下步骤操作:

    1. 对 i=1i = 1 进行第一种操作,数组变为 [1,0][1, 0]。
    2. 对 i=2i = 2 进行第一种操作,数组变为 [1,1][1, 1]。

    第二个测试用例的操作步骤如下图所示:图示

  • 对于第三个测试用例,可以按以下步骤操作:

    1. 对 i=1i = 1 进行第一种操作,数组变为 [1,0,0,0][1, 0, 0, 0]。
    2. 对 i=4i = 4 进行第一种操作,数组变为 [1,0,0,1][1, 0, 0, 1]。
    3. 对 l=1l = 1 和 r=4r = 4 进行第二种操作,因为 a1+a2+a3+a4=2a_1 + a_2 + a_3 + a_4 = 2,满足不小于 ⌈r−l+12⌉=2\lceil\frac{r - l + 1}{2}\rceil = 2,所以可以将区间内元素设为 11,数组变为 [1,1,1,1][1, 1, 1, 1]。

    第三个测试用例的操作步骤如下图所示:图示

本翻译由 AI 自动生成

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

首页