只知道有multiset这个工具,但是一直没有用过。
这一题是要记录每一个人的分数,并且动态维护最大的K个分数。可以采用multiset数据结构进行动态维护。
想当然的以为multiset.erase(value)是删除掉一个value。后面看了文档才发现是删除所有value。
所以这里只能先find一个value,然后调用erase删除。
class Leaderboard {
public:
unordered_map<int,int> h;
multiset<int> s;
Leaderboard() {
h.clear();
s.clear();
}
void addScore(int playerId, int score) {
int & t = h[playerId];
if(s.count(t)) s.erase(s.find(t));
t += score;
s.insert(t);
}
int top(int K) {
int res = 0;
for(auto it = s.rbegin() ; K ; ++it,K--)
res += *it;
return res;
}
void reset(int playerId) {
int & t = h[playerId];
if(s.count(t)) s.erase(s.find(t));
h.erase(playerId);
}
};