using heap to select topn