维护两个map. map1记录频次为n 的数的集合。 map2 记录 数x 的频次。
class FreqStack {
public:
map<int,vector<int>> mp1;
map<int,int> mp2;
stack<int> st;
int maxf;
FreqStack() {
maxf=0;
}
void push(int x) {
if(!mp2.count(x)) mp2[x]=1;
else mp2[x]++;
if(!mp1.count(mp2[x])){
mp1[mp2[x]]=vector<int>();
}
mp1[mp2[x]].push_back(x);
if(maxf<mp2[x]) maxf=mp2[x];
}
int pop() {
int ans=mp1[maxf].back();
mp1[maxf].pop_back();
if(mp1[maxf].size()==0) maxf--;
mp2[ans]--;
return ans;
}
};