package main // 解説読んだ // 値決め打ち二分探索、完全に頭から抜け落ちてた… // 典型中の典型やんけ… import . "fmt" import . "os" import bf "bufio" import . "sort" func main() { rd:=bf.NewReader(Stdin) var n,m int Fscan(rd,&n,&m) ss := make([]int, n) for i:=range ss{ Fscan(rd,&ss[i]) } ts := make([]int, m) for i:=range ts{ Fscan(rd,&ts[i]) } Ints(ss) ttt := make([]int, m) p := Search(m, func(i int) bool { tt := ttt[:i+1] copy(tt, ts[:i+1]) Ints(tt) zz := ss[:] for len(tt) > 0 { for len(zz) > 0 && zz[0] < tt[0] { zz = zz[1:] } if len(zz) == 0 { return true } zz = zz[1:] tt = tt[1:] } return false }) Ints(ts[:p]) ans := 0 for _, t := range ts[:p] { for len(ss) > 0 && ss[0] < t { ss = ss[1:] } ans = max(ans, ss[0]-t) ss = ss[1:] } Println(ans) }