O(lgn)