結果
問題 | No.1117 数列分割 |
ユーザー |
|
提出日時 | 2021-02-01 21:21:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,016 ms / 3,000 ms |
コード長 | 1,039 bytes |
コンパイル時間 | 123 ms |
コンパイル使用メモリ | 82,112 KB |
実行使用メモリ | 166,040 KB |
最終ジャッジ日時 | 2024-06-29 23:27:45 |
合計ジャッジ時間 | 17,992 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
def main():import sysinput=sys.stdin.buffer.readlinefrom collections import dequen,k,m=map(int,input().split())a=list(map(int,input().split()))+[0]for i in range(n-1,-1,-1):a[i]+=a[i+1]plus=[deque([]) for j in range(k)]plus[0].append((-1,a[0]))minus=[deque([]) for j in range(k)]minus[0].append((-1,-a[0]))for i in range(n):for j in range(k-1,-1,-1):res=0while plus[j] and plus[j][0][0]<i-m:plus[j].popleft()while minus[j] and minus[j][0][0]<i-m:minus[j].popleft()if plus[j] and res<plus[j][0][1]-a[i+1]:res=plus[j][0][1]-a[i+1]if minus[j] and res<minus[j][0][1]+a[i+1]:res=minus[j][0][1]+a[i+1]if j+1<k:while plus[j+1] and plus[j+1][-1][1]<=res+a[i+1]:plus[j+1].pop()while minus[j+1] and minus[j+1][-1][1]<=res-a[i+1]:minus[j+1].pop()plus[j+1].append((i,res+a[i+1]))minus[j+1].append((i,res-a[i+1]))elif i==n-1:print(res)exit()main()