# CF_Div2_807_C

📅 2026/7/2 4:29:13
# CF_Div2_807_C
t 次测试给定长度为 n 的字符串 s进行 c 次操作每次操作将第 l 到第 r 的子字符串复制到 s 尾部再进行 q 次询问每次询问当前字符串第 k 个字符是什么数据范围1 ≤ t ≤ 10001 ≤ n ≤ 2⋅10^51 ≤ c ≤ 401 ≤ q ≤ 10^41 ≤ l ≤ r ≤ 10^181 ≤ k ≤ 10^18思路剖析问题分析暴力模拟会 TLE 或 MLE需要考虑偏移量解题思路记录第 i 次操作的偏移量diff[i]和新增长度的左端点和右端点满足left[i] right[i-1]0-basedright[i] left[i] (r - l 1)diff[i] left[i] - l对于 q 次查询的 k一定能通过偏移量映射到初始字符串的某个位置对 k 从 c 开始反向处理具体实现请看代码代码实现#define ll long long void solve() { int n, c, q; cin n c q; string s; cin s; vectorll left(c 1), right(c 1), diff(c 1); // 初始化 left[0] 0, right[0] n - 1; for (int i 1; i c; i) { ll l, r; cin l r; l--, r--; left[i] right[i - 1] 1; right[i] left[i] r - l; diff[i] left[i] - l; } for (int i 1; i q; i) { ll k; cin k; k--; for (int j c; j 1; --j) { if (k left[j] k right[j]) { k - diff[j]; } } cout s[k] \n; } }