你还记得 NTU Final 2014 中的题目 “Just Composite” 吗?这是 “Just” 系列的另一道题。
当然,这道题更简单。我甚至会给你一个正确(但太慢)的 C++ 实现。
struct Con {
int x;
Con(int _x) : x(_x) {}
};
Con operator *(Con a, Con b) { return a.x + b.x; }
void operator +=(Con &a, Con b) { if (b.x > a.x) a.x = b.x; }
void convolution(int n, Con *a, Con *b, Con *c) {
for (int i = 0; i < n; i++) c[i] = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
c[(i + j) % n] += a[i] * b[j];
}
输入格式
第一行包含一个整数 $n$。第二行包含 $n$ 个整数 $a_0, a_1, \dots, a_{n-1}$。第三行包含 $n$ 个整数 $b_0, b_1, \dots, b_{n-1}$。
数据范围
- $1 \le n \le 2 \times 10^5$
- $0 \le a_i, b_i < n$
- $a$ 是 $0, 1, \dots, n-1$ 的一个排列
- $b$ 是 $0, 1, \dots, n-1$ 的一个排列
- 排列 $a$ 和 $b$ 是随机生成的,这会让我们的工作轻松得多。
输出格式
请在单行中输出 $c_0, c_1, \dots, c_{n-1}$ 的值。
样例
输入 1
5 3 4 2 0 1 2 3 0 4 1
输出 1
6 6 7 7 8
输入 2
10 9 2 0 1 6 3 4 5 8 7 3 8 0 9 7 1 4 2 6 5
输出 2
15 17 16 18 16 14 14 15 15 16