countが高速に行えるmaltiset
使い方はmulsisetと同じ
countがlogNで実行できる
template<typename T>
class countable_multiset{
public :
multiset<T> ms;
map<T,int> cnt;
void insert(const T& n){
cnt[n]++;
ms.insert(n);
}
void all_erase(const T& n){
cnt.erase(n);
ms.erase(n);
}
void it_erase(const T& n){
auto it = ms.find(n);
if(it==ms.end())return;
cnt[n] = max(0,cnt[n]-1);
if(cnt[n]==0)cnt.erase(n);
ms.erase(it);
}
int count(const T& n){
if(cnt.count(n))return cnt[n];
return 0;
}
auto find(const T& n){
return ms.find(n);
}
};