fork download
  1. import sys
  2.  
  3. d = list(map(int, sys.stdin.read().split()))
  4. n, p = d[0], d[1:]
  5. h = n // 2
  6.  
  7. s_pos = [i for i, x in enumerate(p) if x <= h]
  8. l_pos = [i for i, x in enumerate(p) if x > h]
  9.  
  10. if s_pos[-1] < l_pos[0] or l_pos[-1] < s_pos[0]:
  11. print(1)
  12. print(*p)
  13. exit()
  14.  
  15. print(2)
  16. ps, sl = [0] * (n + 1), [0] * (n + 1)
  17. for i in range(n): ps[i+1] = ps[i] + (p[i] <= h)
  18. for i in range(n - 1, -1, -1): sl[i] = sl[i+1] + (p[i] > h)
  19.  
  20. bk, bi = max((min(ps[i+1], sl[i+1]), i) for i in range(n))
  21.  
  22. u, c1, c2 = [False] * n, 0, 0
  23. for i in range(bi + 1):
  24. if c1 < bk and p[i] <= h: u[i], c1 = True, c1 + 1
  25. for i in range(bi + 1, n):
  26. if c2 < bk and p[i] > h: u[i], c2 = True, c2 + 1
  27.  
  28. print(*(p[i] for i in range(n) if u[i]))
  29. print(*(p[i] for i in range(n) if not u[i]))
Success #stdin #stdout 0.11s 14076KB
stdin
8
2 8 4 3 1 5 6 7 
stdout
2
2 4 3 5 6 7
8 1