A56 - String Hash Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MB

配点: 1000

問題文

長さ N の文字列 S が与えられます。以下の Q 個のクエリを処理してください。

  • i 個目のクエリ:S[a_i, b_i]S[c_i, d_i] は一致するか?

ただし、S[l, r]Sl 文字目から r 文字目までの連続部分文字列のことを指します。

制約

  • N, Q, a_i, b_i, c_i, d_i は整数である
  • S は英小文字からなる文字列である
  • 1 \leq N \leq 200000
  • 1 \leq Q \leq 200000
  • |S| = N
  • 1 \leq a_i \leq b_i \leq N
  • 1 \leq c_i \leq d_i \leq N
  • b_i - a_i = d_i - c_i

入力

入力は以下の形式で標準入力から与えられます。

N Q
S
a_1 b_1 c_1 d_1
a_2 b_2 c_2 d_2
\vdots
a_Q b_Q c_Q d_Q

出力

Q 行にわたって出力してください。i 行目には、i 個目のクエリで文字列が一致する場合 Yes、そうでない場合 No と出力してください。


入力例 1

7 3
abcbabc
1 3 5 7
1 5 2 6
1 2 6 7

出力例 1

Yes
No
No

1 個目のクエリでは、S[1, 3]S[5, 7] が一致するかどうか聞かれています。いずれも abc であり一致するので、Yes と出力します。

2 個目のクエリでは、S[1, 5]S[2, 6] が一致するかどうか聞かれています。S[1, 5] = abcbaS[2, 6] = bcbab であり一致しないので、No と出力します。