Frequency Queries

  • + 0 comments
    vector<int> freqQuery(const vector<vector<int>>& queries) {
        std::unordered_map<int, int> db;
        std::unordered_map<int, int> qdb;
        vector<int> ret;
        for (const auto& line : queries)
        {
            const int op = line.front(), const key = line.back();
            int curr_cnt;
            switch (op)
            {
                case 1:
                    curr_cnt = db[key];
                    if (curr_cnt)
                        qdb[curr_cnt]--;
                    db[key]++;
                    qdb[curr_cnt+1]++;
                    break;
                case 2:
                    curr_cnt = db[key];
                    if (curr_cnt)
                    {
                        qdb[curr_cnt]--;
                        db[key]--;
                        if (curr_cnt > 1)
                            qdb[curr_cnt-1]++;
                    }
                    break;
                case 3:
                    ret.push_back(min(qdb[key], 1));
                    break;
            }
        }
        return ret;
    }