#include<bits/stdc++.h> using namespace std; struct Opposite_Heap{ //top_heap has the min element,bottom heap has the max element priority_queue<int,vector<int>,less<int> > top_heap; priority_queue<int,vector<int>,greater<int> > bottom_heap; int k; Opposite(){k=0;} void add(int value){ /*change k*/ if(top_heap.size()<=i){ top_heap.push(value); } else{ if(value<top_heap.top()){ bottom_heap.push(top_heap.top()); top_heap.pop(); top_heap.push(value); } else{ bottom_heap.push(value); } } /*change k*/ } int get(){ /*change k*/ /*while(top_heap.size()<=k&&!bottom_heap.empty()){ top_heap.push(bottom_heap.top()); bottom_heap.pop(); }*/ int t=top_heap.top(); /*change k*/ while(top_heap.size()<=k&&!bottom_heap.empty()){ top_heap.push(bottom_heap.top()); bottom_heap.pop(); } return t; } };