CFCF2203F.Binary Search with One Swap
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
考虑以下在一个长度为 n 的数组 a 中查找整数 x 的算法,数组元素从 1 到 n 编号:
- 初始化 l=1 和 r=n;
- 如果 l>r,结束算法并报告未找到目标元素;
- 计算 m=⌊2l+r⌋;
- 如果 am=x,结束算法并报告找到目标元素;
- 如果 am<x,令 l=m+1,否则令 r=m−1;
- 转到步骤 2。
可以证明,如果数组 a 是非递减有序的,那么该算法一定能成功找到 a 中的任意元素。
你的任务如下:对于给定的 n,考虑所有满足 1≤i<j≤n 的数对 (i,j)。对于每个这样的数对,你需要计算它的优美度——即如果我们取数组 a=[1,2,3,…,n] 并交换元素 ai 和 aj,那么上述算法能够成功找到的整数 x(从 1 到 n)的数量。然后,对于每个 k 从 0 到 n,你需要输出 pk——优美度为 k 的数对数量。
输入格式
输入仅有一行,包含一个整数 n(3≤n≤5⋅106)。
输出格式
输出 n+1 个整数 p0,p1,…,pn,其中 pk 是优美度为 k 的数对 (i,j) 的数量。
输入输出样例
输入#1
4
输出#1
0 0 3 3 0
说明/提示
考虑 n=4 的示例:
- 如果交换 a1 和 a2,那么 1、3 和 4 可以被成功找到;
- 如果交换 a1 和 a3,那么 2 和 4 可以被成功找到;
- 如果交换 a2 和 a3,那么 1、3 和 4 可以被成功找到;
- 如果交换 a1 和 a4,那么 2 和 3 可以被成功找到;
- 如果交换 a2 和 a4,那么 1 和 4 可以被成功找到;
- 如果交换 a3 和 a4,那么 1、2 和 4 可以被成功找到。