Cod sursa(job #2296650)

Utilizator retrogradLucian Bicsi retrograd Data 4 decembrie 2018 21:13:32
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
    ifstream cin("trie.in");
    ofstream cout("trie.out");

    map<string, int> freq;
    string str; int op;

    while (cin >> op >> str) {
        if (op == 0) { freq[str] += 1; }
        if (op == 1) {
            auto it = freq.find(str);
            if (it->second == 1) freq.erase(it);
            else --it->second;
        }
        if (op == 2) {
            auto it = freq.find(str);
            if (it == freq.end()) cout << "0\n";
            else cout << it->second << '\n';
        }
        if (op == 3) {
            int ans = 0;
            auto aug = [&](const string& a, const string& b) {
                int ret = 0;
                while (ret < (int)a.size() && ret < (int)b.size() 
                        && a[ret] == b[ret])
                    ++ret;
                ans = max(ans, ret);
            };
            auto it = freq.lower_bound(str);
            if (it != freq.end()) aug(str, it->first);
            if (it != freq.begin()) aug(str, prev(it)->first);
            cout << ans << '\n';
        }
    }
    return 0;
}