結果

問題 No.2978 Lexicographically Smallest and Largest Subarray
ユーザー D M
提出日時 2025-02-06 12:30:29
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 502 ms / 2,000 ms
コード長 2,885 bytes
コンパイル時間 1,251 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 82,680 KB
平均クエリ数 1499.00
最終ジャッジ日時 2025-02-06 12:31:05
合計ジャッジ時間 32,706 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 57
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#!/usr/bin/env pypy3
import sys
def query(l, r, lp, rp):
"""
"? l r lp rp"
A[l,r] A[lp,rp]
1 → A[l,r] < A[lp,rp]
0 → A[l,r] ≥ A[lp,rp]
"""
print(f"? {l} {r} {lp} {rp}")
sys.stdout.flush()
line = sys.stdin.readline().strip()
if not line:
sys.exit(0)
x = int(line)
if x == -1:
sys.exit(0)
return x
def main():
# N, Q N=1000, Q=1500
s = sys.stdin.readline().strip()
if not s:
sys.exit(0)
parts = s.split()
N = int(parts[0])
Q = int(parts[1])
# S: { i A[i,N] }
# T: { i A[i,N] }
S = []
T = []
# i=1,2,...,floor(N/2)
for i in range(1, N//2 + 1):
i1 = 2 * i - 1
i2 = 2 * i
# A[i1,N] A[i2,N]
resp = query(i1, N, i2, N)
if resp == 1:
# A[i1,N] < A[i2,N] → i1 S, i2 T
S.append(i1)
T.append(i2)
else:
# resp == 0 A[i1,N] ≥ A[i2,N] → i2 S, i1 T
S.append(i2)
T.append(i1)
# N N
if N % 2 == 1:
S.append(N)
T.append(N)
# S A[i,N]
#
cand_min = S[0]
for i in S[1:]:
# cand_min,N i,N
resp = query(cand_min, N, i, N)
# resp == 1 A[cand_min,N] < A[i,N] cand_min
# resp == 0
if resp == 0:
cand_min = i
# T A[i,N]
cand_max = T[0]
for i in T[1:]:
# cand_max,N i,N
resp = query(cand_max, N, i, N)
# resp == 1 A[cand_max,N] < A[i,N] → i
if resp == 1:
cand_max = i
# resp == 0 cand_max
#
# A[cand_min,cand_min] (= (A[cand_min]))
# A[cand_max,N]
print(f"! {cand_min} {cand_min} {cand_max} {N}")
sys.stdout.flush()
if __name__ == '__main__':
main()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0