結果
問題 | No.1996 <>< |
ユーザー |
![]() |
提出日時 | 2022-07-01 22:28:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,238 ms / 2,000 ms |
コード長 | 1,267 bytes |
コンパイル時間 | 323 ms |
コンパイル使用メモリ | 82,076 KB |
実行使用メモリ | 94,796 KB |
最終ジャッジ日時 | 2024-11-26 05:49:00 |
合計ジャッジ時間 | 14,850 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 |
ソースコード
import sysinput = sys.stdin.readlinefrom bisect import bisect_leftclass FenwickTree:def __init__(self, size):self.data = [0] * (size + 1)self.size = size# i is exclusivedef prefix_sum(self, i):s = 0while i > 0:s = (s + self.data[i]) % modi -= i & -ireturn sdef add(self, i, x):i += 1while i <= self.size:self.data[i] = (self.data[i] + x) % modi += i & -iclass Compress:def __init__(self, vs):self.xs = list(set(vs))self.xs.sort()def compress(self, x):return bisect_left(self.xs, x)def decompress(self, i):return self.xs[i]def size(self):return len(self.xs)N, K = map(int, input().split())A = list(map(int, input().split()))s = input().rstrip()comp = Compress(A)A = [comp.compress(a) for a in A]M = comp.size()mod = 10**9 + 7dp = [FenwickTree(M) for _ in range(K+1)]for a in A:for k in range(K)[::-1]:if s[k] == '<':c = dp[k].prefix_sum(a)dp[k+1].add(a, c)else:c = dp[k].prefix_sum(M) - dp[k].prefix_sum(a+1)dp[k+1].add(a, c)dp[0].add(a, 1)print(dp[K].prefix_sum(M))