模板总结
作者:
Molip
,
2023-07-30 00:39:21
,
所有人可见
,
阅读 98
int son[N][26], cnt[N], idx;
void insert(char str[]){
int p = 0;
for(int i = 0; str[i]; ++ i){
int u = str[i] - 'a';
if(!son[p][u]) son[p][u] = ++ idx;
p = son[p][u];
}
cnt[p] ++ ;
}
void query(char str[]){
int p = 0;
for(int i = 0; str[i]; ++ i){
int u = str[i] - 'a';
if(!son[p][u]) return ;
p = son[p][u];
}
return cnt[p];
}
int f[N];
void init(){
for(int i = 1; i <= n; ++ i) f[i] = i;
}
int find(int x){
return x == f[x] ? x : (f[x] = find(f[x]));
}
void merge(int u, int v){
f[find(u)] = f[find(v)];
}
int f[N], size[N];
void init(){
for(int i = 1; i <= n; ++ i){
f[i] = i;
size[i] = 1;
}
}
void query(int x){
return x == f[x] ? x : (f[x] = find(f[x]));
}
void merge(int u, int v){
size[find(u)] += size[find(v)];
f[find(v)] = f[find(u)];
}
int h[N], idx;
void down(int u){
int t = u, l = 2 * u, r = 2 * u + 1;
if(l <= idx && h[l] < h[t]) t = l;
if(r <= idx && h[r] < h[t]) t = r;
if(t != u)swap(h[t] , h[u]), down(t);
}
void up(int u){
while(u / 2 && h[u] < h[u / 2]){
swap(h[u], h[u / 2]);
u >>= 1;
}
}
void init(){
int x;
for(int i = 1; i <= n; ++ i){
cin >> x;
h[ ++ idx] = x
}
for(int i = n / 2; i; -- i) down(i);
}
void add(int x){
h[ ++ idx] = x;
up(idx);
}
void del(int k){
h[k] = h[idx];
idx -- ;
up(k); down(k);
}
void change(int k, int x){
h[k] = x;
up(k); down(k);
}
int h[N], ph[N], hp[N], idx, k;
void swap_head(int u, int v){
swap(h[u], h[v]);
swap(hp[u], hp[v]);
swap(ph[hp[u]], ph[hp[v]]);
}
void init(){
int x;
for(int i = 1; i <= n; ++ i){
cin >> x;
idx ++ ; k ++ ;
h[idx] = x;
}
for(int i = n / 2; i; -- i) down(i);
}
void add(int x){
++ idx; ++ k;
h[idx] = x;
ph[k] = idx;
hp[idx] = k;
up(idx);
}
字典树查询有点小问题
更新:
int query(char str[]){ int p = 0; for(int i = 0; str[i]; ++ i){ int u = str[i] - 'a'; if(!son[p][u]) return 0; p = son[p][u]; } return cnt[p]; }