結果
問題 | No.1095 Smallest Kadomatsu Subsequence |
ユーザー |
|
提出日時 | 2021-03-25 00:17:12 |
言語 | Kuin (KuinC++ v.2021.9.17) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,139 bytes |
コンパイル時間 | 2,841 ms |
コンパイル使用メモリ | 149,616 KB |
実行使用メモリ | 49,152 KB |
最終ジャッジ日時 | 2024-09-16 12:06:00 |
合計ジャッジ時間 | 10,632 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 TLE * 1 -- * 4 |
ソースコード
func main()const invalid: int :: lib@intMaxvar n: int :: cui@inputInt()var a: []int :: #[n]intfor i(0, n - 1)do a[i] :: cui@inputInt()end forvar lMin: []int :: #[n]intvar rMin: []int :: #[n]intblockvar min: int :: a[0]for i(1, n - 1)do lMin[i] :: mindo min :: [min, a[i]].min()end forend blockblockvar min: int :: a[n - 1]for i(n - 2, 0, -1)do rMin[i] :: mindo min :: [min, a[i]].min()end forend blockvar lLow: []int :: #[n]intvar rLow: []int :: #[n]intblockvar bin: BinaryTree :: #BinaryTreedo bin.ins(a[0])for i(1, n - 1)var p: Node :: bin.lower_bound(a[i])do lLow[i] :: p =& null ?(-1, p.val)do bin.ins(a[i])end forend blockblockvar bin: BinaryTree :: #BinaryTreedo bin.ins(a[n - 1])for i(n - 2, 0, -1)var p: Node :: bin.lower_bound(a[i])do rLow[i] :: p =& null ?(-1, p.val)do bin.ins(a[i])end forend blockvar ans: int :: invalidfor i(1, n - 2)var v: int :: a[i]; ^var lm: int :: lMin[i]var rm: int :: rMin[i]if(lm < v & v > rm)do ans :: [ans, lm + v + rm].min()end if; vvar ll: int :: lLow[i]var rl: int :: rLow[i]if(ll > v & v < rl)do ans :: [ans, ll + v + rl].min()end ifend forif(ans = invalid)do ans :: -1end ifdo cui@print("\{ans}\n")class Node()+var val: int+var left: Node+var right: Node+var parent: Node+*func toStr(): []charret "\{me.val}"end func+func init(val: int, parent: Node): Nodedo me.val :: valdo me.parent :: parentdo me.left :: nulldo me.right :: nullret meend func+func next(): Nodevar n: Node :: meif(n.right <>& null)ret n.right.min()end ifwhile(n.parent <>& null & n.parent.left <>& n)do n :: n.parentend whileret n.parentend func+func min(): Nodevar n: Node :: mewhile(n.left <>& null)do n :: n.leftend whileret nend funcend classclass BinaryTree()var root: Node+func find(elem: int): Nodevar n: Node :: me.rootwhile loop(n <>& null)if(elem < n.val)do n :: n.leftelif(elem > n.val)do n :: n.rightelsebreak loopend ifend whileret nend func+func lower_bound(elem: int): Nodevar n: Node :: me.rootwhile loop(n <>& null)if(elem < n.val)if(n.left =& null)if(n.val >= elem)ret nelseret n.parentend ifend ifdo n :: n.leftelif(elem > n.val)if(n.right =& null)if(n.val >= elem)ret nelseret n.parentend ifend ifdo n :: n.rightelsebreak loopend ifend whileret nend func+func ins(elem: int)if(me.root =& null)do me.root :: (#Node).init(elem, null)retend ifvar n: Node :: me.rootvar p: Node :: nullwhile(n <>& null)do p :: nif(elem < n.val)do n :: n.leftelsedo n :: n.rightend ifend whiledo n :: (#Node).init(elem, p)if(elem < p.val)do p.left :: nelsedo p.right :: nend ifend funcend classend func