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, n) for i:=range ts{ Fscan(rd,&ts[i]) } Ints(ss) tree := gen(ss) zs := make([]int, 0, m) for _, t := range ts { _, ok := tree.Get(t) // TLEしそう if ok { zs = append(zs, t) } else { break } } Ints(zs) ans := 0 for _, z := range zs { for len(ss) > 0 && ss[0] < z { ss = ss[1:] } ans = max(ans, ss[0]-z) ss = ss[1:] } Println(ans) } type Node struct { value,count,total int left,right *Node } func (node*Node) Total() int { if node == nil { return 0 } return node.total } func gen(xs []int) *Node { if len(xs) == 0 { return nil } lp := len(xs)/2 value := xs[lp] count := 1 for lp > 0 { if xs[lp-1] != value { break } count++ lp-- } rp := len(xs)/2 for rp+1 0 { ret = node.value node.count-- node.total-- ok = true return } ret, ok = node.right.Get(x) if ok { node.total-- } return }