loj#P538. 「LibreOJ NOIP Round #1」数列递推

「LibreOJ NOIP Round #1」数列递推

题目描述

sosusosu 虐爆 OI 之后成为了一名文化课选手。一天,他做作业碰到了一堆数列问题,每道题给出的数列都是以下形式:

给定一个下标从 00 开始,无限长的整数列 {ai}, iN\{a_i\},\ i\in \mathbb{N},已知 a0,a1a_0,a_1 的值,以及递推式 $a_{i+2}=k a_{i+1}+a_i,\ i\in\mathbb{N},k\in {\mathbb{N}^+}$。

sosusosu 研究了这些数列,发现它们十分优美充满人类智慧,于是决定出一道 OI 题。

sosusosu 给了你一个集合 SNS\subset \mathbb{N},他想问你对于 SS 中的每个数 sis_i,使得 asia_{s_i} 最大的 sis_i 和使得 asia_{s_i} 最小的 sis_i 分别是多少。如果这样的 sis_i 有多个,请你回答最小的一个。

另外,sosusosu 准备对他作业中碰到的每个数列都让你回答一次,不过每次的集合 SS 是一样的。

输入格式

输入第一行一个整数 mm 表示 SS 中元素个数。
第二行 mm 个整数 s1,s2,,sms_1,s_2,\cdots ,s_m 表示 SS 中的元素。保证它们是非负整数且严格递增(即 si<si+1s_i<s_{i+1})。
第三行一个整数 nn 表示询问的数列个数。
接下来 nn 行每行三个整数 a0,a1,ka_0, a_1, k 描述一个数列。

输出格式

输出共 nn 行,每行依次输出两个整数 maxsi,minsi\mathrm{maxsi},\mathrm{minsi},依次表示 SS 的元素 sis_i 中,使得 asia_{s_i} 最大的 sis_i 和使得 asia_{s_i} 最小的 sis_i 的值。如果这样的 sis_i 有多个,请你回答最小的一个。

8
1 2 3 4 5 6 7 8
2
10 -6 1
0 0 1
2 1
1 1
3
0 1 2
2
-2 3 1
3 -2 2
1 0
0 1
29
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912
4
10000000 10000000 100
9999984 -6180330 1
9999984 -6180329 1
-10000000 4142135 2
536870912 2
2 536870912
536870912 16
8 536870912

数据范围与提示

对于所有数据,1n3×1051\le n\le 3\times 10^51m1051\le m\le 10^50si1090\le s_i\le 10^9107a0,a1107-10^7\le a_0,a_1\le 10^71k5×1031\le k\le 5\times 10^3,保证 sis_i 严格单调递增。

注意,本题输入规模较大,请使用较快的方式读入。LOJ 上 C 语言的 scanf、C++ 的关闭同步cin、Pascal 的 read 读入此题数据时间均在 50 ~ 200 毫秒之间。

所有测试数据的范围和特点如下表所示:
(未标明的以上述所有数据的限制为准)

测试点编号 n,mn,m 的限制 a0,a1,ka_0,a_1,k 的范围 特殊限制
1 n,m100n,m\le 100 100a0,a1100,k10-100\le a_0,a_1\le 100,k\le 10 sm10s_m\le 10
2
3
4 n105n\le 10^5 k=1k=1 -
5
6
7 - a0a10a_0\cdot a_1\ge 0(即 a0,a1a_0,a_1 不会一正一负)
8 a1a0|a_1|\ge|a_0|
9 SS 中元素都是偶数
10
11
12 k10k\le 10
13 k100k\le 100
14 k1000k\le 1000 -
15 -
16 n1.5×105n\le 1.5\times 10^5 k10k\le 10
17 n2×105n\le 2\times 10^5 k100k\le 100
18 n2.5×105n\le 2.5\times 10^5 k1000k\le 1000
19 -
20