Untitled
unknown
c_cpp
a year ago
821 B
7
Indexable
#include <bits/stdc++.h>
using namespace std;
const int A = 26;
const int N = 4e5 + 9;
int trie[N][A], freq[N];
int is_leaf[N];
int id = 1;
// trie[node][j] is the index of the node you go to if you choose edge labelled with j
void insert(const string& s) {
int v = 0;
for (int i = 0; i < (int)s.length(); i++) {
int j = s[i] - 'a';
if (!trie[v][j]) {
trie[v][j] = id++;
}
v = trie[v][j];
freq[v]++;
}
}
void erase(const string& s) { // assume s is already in the trie
int v = 0;
for (int i = 0; i < (int)s.length(); i++) {
int j = s[i] - 'a';
v = trie[v][j];
freq[v]--;
}
}
bool query(const string& pref) {
int v = 0;
for (int i = 0; i < (int)pref.length(); i++) {
int j = pref[i] - 'a';
if (freq[trie[v][j]]) v = trie[v][j];
else return false;
}
return true;
}
int main() {
}
Editor is loading...
Leave a Comment