QOJ.ac

QOJ

実行時間制限: 6.0 s メモリ制限: 512 MB 満点: 100 ハック可能 ✓

#6815. 滞后赛车

統計

滞后赛车(Hysteretic Racing)通常是为了追求高速。然而,树懒们却喜欢滞后赛车。它们认为,慢一点可能更有利于展现赛车手的技巧,并且所有树懒都会以相同的速度行驶。获胜者是在整个旅程中驾驶技术最好的人。

图中展示了最贴切的形象:电影《疯狂动物城》中的树懒赛车手兼车管所职员“闪电”。不过,为了避免法律问题,我们使用了这个人工智能生成的树懒司机。

巨大的赛道由 $n$ 个土壤网格 $0, 1, \dots, n-1$ 组成,它们首尾相连形成一个圆环,其中网格 $i$ 的下一个网格是 $(i+1) \pmod n$。网格 $i$ 的难度是一个正整数 $d_i$,难度最低的网格(即难度为 $1$ 的网格)被称为普通网格。通过网格 $i$ 的时间成本定义如下:如果树懒进入网格 $i$ 时的速度 $v$ 高于 $\frac{1}{d_i}$(单位:普通网格/秒),则由于树懒的懒惰,速度会被调整为 $\frac{1}{d_i}$。此后,树懒通过该网格所需的时间将是普通网格的 $d_i$ 倍,即耗时 $\frac{d_i}{v}$ 秒。

有时,树懒会花钱请勤劳的人类来重建巨大的赛道。将会发生两种工作:

  • Plow(耕地):在网格 $l, (l+1) \pmod n, \dots, r$ 中,为每个网格增加特定的难度 $\Delta$。
  • Ram(夯土):在网格 $l, (l+1) \pmod n, \dots, r$ 中,将每个网格的难度替换为特定的难度 $d'$。

为了开始一场赛车游戏,裁判会选择一个起始网格 $s$ 和游戏总时间 $t$ 秒,游戏组织方式如下:

  • 树懒初始速度为 $1$。
  • 在游戏开始时刻,所有树懒开始进入网格 $s$。
  • 通过一个网格后,树懒进入下一个网格,其中“下一个”的定义如上所述。
  • 游戏在 $t$ 秒后结束。所有树懒会紧急刹车并停在那里。

树懒只能走得很慢,所以裁判会立即开始走向游戏的终点位置。现在,你也是受雇的人类之一,需要告诉裁判在游戏开始时该去哪里。

既然你不是树懒,你必须快速完成这项工作。

输入格式

第一行包含两个整数 $n, q$ ($2 \le n, q \le 2 \times 10^5$),由空格分隔,分别表示巨大赛道的长度以及操作和查询的数量。

第二行包含 $n$ 个整数,由空格分隔,第 $i$ 个数表示 $d_{i-1}$,即第 $i$ 个网格的初始难度。

接下来的 $q$ 行包含查询和操作。每一行必须属于以下三种类型之一:

  • P l r ΔPlow,从第 $l$ 个网格到第 $r$ 个网格,增加难度 $\Delta$。
  • R l r d'Ram,从第 $l$ 个网格到第 $r$ 个网格,将难度替换为 $d'$。
  • Q s tQuery,查询从 $s$ ($0 \le s < n$) 开始且总时间为 $t$ ($0 \le t \le 2 \times 10^{17}$) 秒的游戏的终点位置。注意,两个网格边界处的位置被定义为“下一个”网格,这意味着如果树懒在离开第 $i$ 个网格进入下一个网格时恰好停止,则该位置被定义为网格 $(i+1) \pmod n$。

保证对于所有出现在 $q$ 行中的 $l, r$,都有 $0 \le l, r < n$。我们精确定义区间 $[l, r]$ 如下:

  • $l \le r$:$\{l, l+1, \dots, r\}$;
  • $l > r$:$\{l, l+1, \dots, n-1, 0, 1, \dots, r\}$。

同时保证输入中出现的所有难度,包括 $d_i, \Delta, d'$,均为不超过 $10^6$ 的正整数;每次操作后网格的难度均不超过 $10^6$。

输出格式

对于每个查询,你需要输出一个整数,占一行,表示你的答案。

样例

样例输入 1

2 4
1 2
Q 0 0
Q 0 1
Q 0 4
Q 0 5

样例输出 1

0
1
1
0

样例输入 2

5 7
2 5 1 4 3
Q 3 28
Q 0 39
P 4 0 3
Q 2 60
R 4 1 2
Q 1 22
Q 3 19260817

样例输出 2

0
3
0
4
1

说明

在第一个样例中,我们说明了如何定义边界。从 $0$ 开始游戏,在 $t=0$ 时被认为在网格 $0$ 中;在 $t=1$ 时被认为在网格 $1$ 中,因为它通过第一个网格仅需 $1$ 秒。此后,树懒的速度降低为 $\frac{1}{2}$,通过网格 $1$ 需要 $4$ 秒。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.