結果
問題 | No.1996 <>< |
ユーザー | SidewaysOwl |
提出日時 | 2022-07-01 23:02:35 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,243 bytes |
コンパイル時間 | 912 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 128,364 KB |
最終ジャッジ日時 | 2024-05-04 17:29:40 |
合計ジャッジ時間 | 25,405 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 44 ms
53,888 KB |
testcase_01 | AC | 44 ms
54,016 KB |
testcase_02 | AC | 47 ms
59,392 KB |
testcase_03 | AC | 67 ms
71,680 KB |
testcase_04 | AC | 43 ms
54,400 KB |
testcase_05 | AC | 43 ms
53,760 KB |
testcase_06 | AC | 44 ms
54,400 KB |
testcase_07 | AC | 49 ms
60,672 KB |
testcase_08 | AC | 118 ms
77,184 KB |
testcase_09 | AC | 65 ms
70,272 KB |
testcase_10 | AC | 120 ms
76,928 KB |
testcase_11 | AC | 906 ms
101,692 KB |
testcase_12 | AC | 1,676 ms
126,596 KB |
testcase_13 | TLE | - |
testcase_14 | AC | 1,971 ms
126,240 KB |
testcase_15 | AC | 1,714 ms
121,596 KB |
testcase_16 | AC | 1,531 ms
115,640 KB |
testcase_17 | AC | 1,677 ms
122,008 KB |
testcase_18 | AC | 1,067 ms
105,512 KB |
testcase_19 | AC | 1,254 ms
108,648 KB |
testcase_20 | AC | 1,198 ms
106,548 KB |
testcase_21 | AC | 1,519 ms
117,364 KB |
testcase_22 | AC | 1,711 ms
120,332 KB |
testcase_23 | AC | 192 ms
80,352 KB |
testcase_24 | AC | 1,088 ms
108,932 KB |
testcase_25 | AC | 569 ms
89,092 KB |
testcase_26 | AC | 915 ms
101,604 KB |
testcase_27 | AC | 303 ms
83,288 KB |
testcase_28 | AC | 94 ms
76,544 KB |
testcase_29 | AC | 547 ms
87,284 KB |
testcase_30 | AC | 142 ms
77,988 KB |
testcase_31 | AC | 343 ms
85,064 KB |
testcase_32 | AC | 133 ms
77,312 KB |
ソースコード
class SegmrntTree: def __init__(self,arr,func,i_ele): self.i_ele = i_ele self.func = func arr_len = len(arr) self.tree_len = 2 ** (arr_len-1).bit_length() * 2 self.tree = [i_ele] * self.tree_len for i in range(arr_len): self.tree[i + self.tree_len // 2] = arr[i] for i in range(self.tree_len // 2 -1,0,-1): self.tree[i] = func(self.tree[i * 2],self.tree[i * 2 + 1]) def query_range(self,l,r): res = self.i_ele l += self.tree_len // 2 - 1 r += self.tree_len // 2 while l < r: if l & 1: res = self.func(res,self.tree[l]) l += 1 if r & 1: res = self.func(res,self.tree[r-1]) r -= 1 l >>= 1 r >>= 1 return res def query(self,l): return self.tree[l + self.tree_len // 2 - 1] def update(self,l,x): l += self.tree_len // 2 - 1 self.tree[l] = self.func(x,self.tree[l]) def calc(l): if l & 1: l -=1 return l >> 1 while calc(l): if l & 1: self.tree[calc(l)] = self.func(self.tree[l],self.tree[l-1]) else: self.tree[calc(l)] = self.func(self.tree[l],self.tree[l+1]) l = calc(l) n,k = map(int,input().split()) a = list(map(int,input().split())) s = list(input()) from collections import defaultdict d = defaultdict(int) d[0] = 1 for i,e in enumerate(sorted(set(a)),start=2): d[e] = i d[10**20] = len(d) + 1 nn = len(d) dp = [] mod = 10 ** 9 + 7 def sum_(x,y): return (x + y) % mod for i in range(k+1): dp.append(SegmrntTree([0]*nn,sum_,0)) for i in range(1,n+1): idx = d[a[i-1]] dp[0].update(idx,1) for j in range(1,k+1): if s[j-1] == "<": down = dp[j-1].query_range(1,idx-1) dp[j].update(idx,down) else: up = dp[j-1].query_range(idx+1,nn) dp[j].update(idx,up) # for j in range(k+1): # print(dp[j].tree) # print() ans = 0 for i in range(1,nn): ans += dp[k].query(i) # print(dp[k].query(i+1)) ans %= mod print(ans)