; decreasing-increasing array
(define (split-while pred? xs)
(let loop ((xs xs) (ys '()))
(if (or (null? xs) (not (pred? (car xs))))
(values (reverse ys) xs)
(loop (cdr xs) (cons (car xs) ys)))))
(define (sorted? pred? xs)
(cond ((or (null? xs) (null? (cdr xs))) #t)
((not (pred? (car xs) (cadr xs))) #f)
(else (sorted? pred? (cdr xs)))))
(define (decr-incr xs)
(if (< (length xs) 3) #f
(let ((pivot (apply min xs)))
(let-values (((decr incr)
(split-while (lambda (x) (not (= x pivot))) xs)))
(if (and (not (null? decr)) (not (null? incr))
(sorted? <= (reverse decr)) (sorted? <= incr))
pivot
#f)))))
(display (decr-incr '(10 10 10 8 8 6 4 4 3 12 13 22 31 40 59 68))) (newline)
(display (decr-incr '(1 2 4 8 16 32 64))) (newline)
OyBkZWNyZWFzaW5nLWluY3JlYXNpbmcgYXJyYXkKCihkZWZpbmUgKHNwbGl0LXdoaWxlIHByZWQ/IHhzKQogIChsZXQgbG9vcCAoKHhzIHhzKSAoeXMgJygpKSkKICAgIChpZiAob3IgKG51bGw/IHhzKSAobm90IChwcmVkPyAoY2FyIHhzKSkpKQogICAgICAgICh2YWx1ZXMgKHJldmVyc2UgeXMpIHhzKQogICAgICAgIChsb29wIChjZHIgeHMpIChjb25zIChjYXIgeHMpIHlzKSkpKSkKCihkZWZpbmUgKHNvcnRlZD8gcHJlZD8geHMpCiAgKGNvbmQgKChvciAobnVsbD8geHMpIChudWxsPyAoY2RyIHhzKSkpICN0KQogICAgICAgICgobm90IChwcmVkPyAoY2FyIHhzKSAoY2FkciB4cykpKSAjZikKICAgICAgICAoZWxzZSAoc29ydGVkPyBwcmVkPyAoY2RyIHhzKSkpKSkKCihkZWZpbmUgKGRlY3ItaW5jciB4cykKICAoaWYgKDwgKGxlbmd0aCB4cykgMykgI2YKICAgIChsZXQgKChwaXZvdCAoYXBwbHkgbWluIHhzKSkpCiAgICAgIChsZXQtdmFsdWVzICgoKGRlY3IgaW5jcikKICAgICAgICAgICAgICAgICAgICAoc3BsaXQtd2hpbGUgKGxhbWJkYSAoeCkgKG5vdCAoPSB4IHBpdm90KSkpIHhzKSkpCiAgICAgICAgKGlmIChhbmQgKG5vdCAobnVsbD8gZGVjcikpIChub3QgKG51bGw/IGluY3IpKQogICAgICAgICAgICAgICAgIChzb3J0ZWQ/IDw9IChyZXZlcnNlIGRlY3IpKSAoc29ydGVkPyA8PSBpbmNyKSkKICAgICAgICAgICAgcGl2b3QKICAgICAgICAgICAgI2YpKSkpKQoKKGRpc3BsYXkgKGRlY3ItaW5jciAnKDEwIDEwIDEwIDggOCA2IDQgNCAzIDEyIDEzIDIyIDMxIDQwIDU5IDY4KSkpIChuZXdsaW5lKQooZGlzcGxheSAoZGVjci1pbmNyICcoMSAyIDQgOCAxNiAzMiA2NCkpKSAobmV3bGluZSk=