結果

問題 No.1079 まお
ユーザー gew1fw
提出日時 2025-06-12 20:01:53
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,357 bytes
コンパイル時間 209 ms
コンパイル使用メモリ 81,596 KB
実行使用メモリ 184,468 KB
最終ジャッジ日時 2025-06-12 20:05:44
合計ジャッジ時間 11,491 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 15 TLE * 1 -- * 14
権限があれば一括ダウンロードができます

ソースコード

diff #

import bisect

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    N = int(data[0])
    K = int(data[1])
    A = list(map(int, data[2:2+N]))
    
    # 预处理字典,记录每个值的出现位置
    value_indices = {}
    for i, v in enumerate(A):
        if v not in value_indices:
            value_indices[v] = []
        value_indices[v].append(i)
    
    total = 0
    
    for i in range(N):
        a_i = A[i]
        target = K - a_i
        if target not in value_indices:
            continue
        j_list = value_indices[target]
        # 找到j >=i的位置
        idx = bisect.bisect_left(j_list, i)
        valid_js = j_list[idx:]
        for j in valid_js:
            if j < i:
                continue
            # 现在检查区间[i,j]是否满足条件b
            # 找出区间中的最小值
            # 我们需要一个能够快速查询区间最小值和出现次数的结构
            min_val = min(A[i:j+1])
            # 统计该最小值在区间中的出现次数
            count = 0
            for k in range(i, j+1):
                if A[k] == min_val:
                    count +=1
                    if count >1:
                        break
            if count ==1:
                total += (j - i +1)
    
    print(total)

if __name__ == '__main__':
    main()
0