struct Tower{ Tower(int h, int p){ height = h; pos = p; } bool operator < (Tower &t) { if (height < t.height) { return true; } else { return false; } } int height; int pos; }; struct cmp_less{ bool operator() (Tower & t1, Tower &t2){ if (t1.height < t2.height) { return true; } else { return false; } } }; struct cmp_greater{ bool operator() (Tower & t1, Tower &t2){ if (t1.height > t2.height) { return true; } else { return false; } } }; priority_queue<Tower, vector<Tower>, cmp_greater> min_heap(tower.begin(), tower.begin() + n / 2) ;//最小堆 priority_queue<Tower, vector<Tower>, cmp_less> max_heap(tower.begin() + n / 2, tower.end() ); //最大堆