結果
| 問題 | 
                            No.1095 Smallest Kadomatsu Subsequence
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2020-06-28 22:18:59 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 124 ms / 2,000 ms | 
| コード長 | 1,076 bytes | 
| コンパイル時間 | 142 ms | 
| コンパイル使用メモリ | 82,176 KB | 
| 実行使用メモリ | 112,112 KB | 
| 最終ジャッジ日時 | 2024-07-08 08:37:38 | 
| 合計ジャッジ時間 | 4,324 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 30 | 
ソースコード
import sys
sys.setrecursionlimit(10 ** 7)
rl = sys.stdin.readline
def solve():
    N = int(rl())
    A = list(map(int, rl().split()))
    
    pos = {ai: idx for idx, ai in enumerate(A)}
    
    left_min = A[:]
    for i in range(1, N):
        left_min[i] = min(left_min[i - 1], left_min[i])
    right_min = A[:]
    for i in range(N - 2, -1, -1):
        right_min[i] = min(right_min[i + 1], right_min[i])
    
    INF = 10 ** 9
    ans = INF
    min_a = right_min[0]
    min_pos = pos[min_a]
    if min_pos != 0 and min_pos != N - 1:
        ans = min_a + left_min[min_pos - 1] + right_min[min_pos + 1]
    
    if min_pos < N - 1:
        for pos_b in range(min_pos + 1, N - 1):
            if right_min[pos_b + 1] < A[pos_b]:
                ans = min(ans, min_a + A[pos_b] + right_min[pos_b + 1])
    
    if 1 < min_pos:
        for pos_b in range(min_pos - 1, 0, -1):
            if left_min[pos_b - 1] < A[pos_b]:
                ans = min(ans, min_a + A[pos_b] + left_min[pos_b - 1])
    print(ans if ans != INF else -1)
if __name__ == '__main__':
    solve()