結果
問題 |
No.3075 Mex Recurrence Formula
|
ユーザー |
![]() |
提出日時 | 2025-03-28 21:16:34 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 590 ms / 2,000 ms |
コード長 | 1,194 bytes |
コンパイル時間 | 251 ms |
コンパイル使用メモリ | 82,632 KB |
実行使用メモリ | 146,876 KB |
最終ジャッジ日時 | 2025-03-28 21:16:49 |
合計ジャッジ時間 | 14,842 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
class segtree: def __init__(self,n): self.size=1 while self.size<n: self.size*=2 self.dat=[10**10]*(self.size*2) def update(self,x,a): x+=self.size self.dat[x]=a while x>1: x//=2 self.dat[x]=min(self.dat[2*x],self.dat[2*x+1]) def querry(self,u,v): u+=self.size v+=self.size score=10**10 while u<v: if u&1: score=min(score,self.dat[u]) u+=1 if v&1: v-=1 score=min(score,self.dat[v]) u//=2 v//=2 return score N,K=map(int,input().split()) A=list(map(int,input().split())) result=[0]*(3*N+3) B=set() for i in range(N): result[i]=A[i] B.add(A[i]) for x in range(10**7): if not x in B: result[N]=x break if K<=N+1: print(result[K-1]) exit() T={} Z=segtree(N+5) for x in range(N+4): Z.update(x,x) for i in range(N+1): x=result[i] if not x in T: T[x]=1 else: T[x]+=1 if x<N+3: Z.update(x,10**10) for i in range(N+1,2*N+2): y=result[i-(N+1)] T[y]-=1 if T[y]==0 and y<N+4: Z.update(y,y) x=Z.querry(0,N+5) result[i]=x Z.update(x,10**10) if not x in T: T[x]=1 else: T[x]+=1 pos=(K-1)%(N+1) print(result[pos+N+1])