結果
問題 | No.1095 Smallest Kadomatsu Subsequence |
ユーザー |
👑 ![]() |
提出日時 | 2020-06-27 01:10:10 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,384 bytes |
コンパイル時間 | 173 ms |
コンパイル使用メモリ | 82,288 KB |
実行使用メモリ | 85,912 KB |
最終ジャッジ日時 | 2024-07-05 04:36:37 |
合計ジャッジ時間 | 4,739 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 10 TLE * 1 -- * 19 |
ソースコード
def Binary_Search_Count(A,x,sort=True,equal=False):"""2分探索によって,x未満の要素の個数を調べる.A:リストx:調べる要素sort:ソートをする必要があるかどうか(Trueで必要)equal:Trueのときはx"未満"がx"以下"になる"""if sort:A.sort()N=len(A)if A[-1]<=x:return Nelif x<A[0] or (not equal and x==A[0]):return 0L,R=0,Nwhile R-L>1:C=L+(R-L)//2if x<A[C] or (not equal and x==A[C]):R=Celse:L=Creturn Rdef Binary_Search_Low_Value(A,x,sort=True,equal=False):"""Aのx未満の要素の中で最大のものを出力する.A:リストx:調べる要素sort:ソートをする必要があるかどうか(Trueで必要)equal:Trueのときはx"未満"がx"以下"になる※全ての要素がx以上(超える)場合はNoneが返される."""if sort:A.sort()K=Binary_Search_Count(A,x,sort=False,equal=equal)if K==0:return Noneelse:return A[K-1]def Binary_Search_High_Value(A,x,sort=True,equal=False):"""Aのxを超える要素の中で最大のものを出力する.A:リストx:調べる要素sort:ソートをする必要があるかどうか(Trueで必要)equal:Trueのときはx"を超える"がx"以上"になる※全ての要素がx以下(未満)場合はNoneが返される."""if sort:A.sort()K=Binary_Search_Count(A,x,sort=False,equal=not equal)if K==len(A):return Noneelse:return A[K]#----------------------------------------------------from copy import copyimport sysN=int(input())A=list(map(int,input().split()))B=copy(A)B.sort()if B==A or B[::-1]==A:print(-1)sys.exit()#Type AM=10**40Lmin=[0]*Nfor i in range(N):M=Lmin[i]=min(M,A[i])M=10**40Rmin=[0]*Nfor i in range(N-1,-1,-1):M=Rmin[i]=min(M,A[i])alpha=10**40for i in range(1,N-1):if Lmin[i-1]<A[i] and A[i]>Rmin[i+1]:alpha=min(alpha,Lmin[i-1]+A[i]+Rmin[i+1])beta=10**40for i in range(1,N-1):a=A[i]P=Binary_Search_High_Value(A[:i],a,equal=False)Q=Binary_Search_High_Value(A[i+1:],a,equal=False)if P!=None and Q!=None:beta=min(beta,P+Q+a)print(min(alpha,beta))