結果
| 問題 | No.2182 KODOKU Stone | 
| コンテスト | |
| ユーザー |  MasKoaTS | 
| 提出日時 | 2022-12-17 22:37:38 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 527 ms / 2,000 ms | 
| コード長 | 1,061 bytes | 
| コンパイル時間 | 254 ms | 
| コンパイル使用メモリ | 82,304 KB | 
| 実行使用メモリ | 134,932 KB | 
| 最終ジャッジ日時 | 2024-11-17 07:25:49 | 
| 合計ジャッジ時間 | 11,085 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 37 | 
ソースコード
import sys, heapq from bisect import bisect_left input = sys.stdin.readline N = int(input()) K = list(map(int, input().split())) T = [0] * N A = [[] for _ in [0] * N] st = set([]) for i in range(N): T[i] = int(input()) A[i] = sorted(map(int, input().split())) st |= set(A[i]) Alis = sorted(st) def check(m): P = []; q_max = 0 for lis in A: s = len(lis) - bisect_left(lis, m) if(s < len(lis)): P.append(s) elif(q_max < s): q_max = s P.sort() if not(P): return True que = list(K[len(P):]) heapq.heapify(que) if(que and q_max >= que[0]): return True for i in range(len(P) - 1, -1, -1): u = K[i] if not(que) else min(que[0], K[i]) if(P[i] >= u): return True elif(P[i] < u - 1): return False; elif(que and P[i] == que[0] - 1 and q_max >= K[i]): return True elif(i == 0): return False elif(not(que) or P[i] < que[0] - 1): continue heapq.heapreplace(que, K[i]) return True ok = 0 ng = len(st) while(ng - ok > 1): t = (ok + ng) >> 1 if check(Alis[t]): ok = t else: ng = t ans = Alis[ok] print(ans)
