I am studying BinarySearch.
This algorithm divide permutation in middle then repeat the division.
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_4_D
https://atcoder.jp/contests/abc030/tasks/abc030_c
https://atcoder.jp/contests/abc034/tasks/abc034_d
I learned binary search, std:priority_queue, std:pair and lower_bound from as above a problem.