n = int(input())
N =100010
null = 0x3f3f3f3f
s =[null]*N
def find(x):
k = x%N
while s[k]!=null and s[k]!=x:
k +=1ifk==N:
k =0return k
for_in range(n):
op, pt = input().split()ifop=='I':
x = int(pt)
s[find(x)]= x
else:
x = int(pt)if s[find(x)]==x:
print('Yes')
else:
print('No')```## 839模拟堆
在堆里面进行删除操作的时候,要先删除,才能down;不然,则可能将最后一个元素换上来。
```bash
n = int(input())
N =100010
hp,ph,h =[0]*N,[0]*N,[0]*N
idx,size=0,0
def insert(x):
global idx,size
idx+=1size+=1
h[size]= x
ph[idx]= size
hp[size]= idx
up(size)
def down(u):
t = u
if u*2<=size and h[u*2]<h[t]:
t = u*2
if u*2+1<=size and h[u*2+1]<h[t]:
t = u*2+1
if t!=u:
swap(u,t)
down(t)
def up(u):
while u//2 and h[u//2]>h[u]:
swap(u, u//2)u=u//2
def swap(a,b):
ph[hp[a]],ph[hp[b]]= b,a
hp[a],hp[b]= hp[b],hp[a]
h[a],h[b]= h[b],h[a]for_in range(n):
op, *pt = input().split()ifop=='I':
x = int(pt[0])
insert(x)elifop=='PM':
print(h[1])elifop=='DM':
swap(1,size)# 同理,先要删除,才能down
size -=1
down(1)elifop=='D':
k = int(pt[0])
k = ph[k]
swap(k,size)# 交换完,先要删除,才能down
size -=1
up(k)
down(k)
else:
k,x = map(int,pt)
k = ph[k]
h[k]= x
up(k)
down(k)
837连通块中点的数量
n,m = map(int,input().split())
N =100010
p =[x forxin range(N)]
cnt =[1]*N
def find(x):
if p[x]!=x:
p[x]= find(p[x])return p[x]
def merge(a,b):
if find(a)!=find(b):
cnt[find(b)]+= cnt[find(a)]
p[find(a)]= find(b)for_in range(m):
op, *pt = input().split()ifop=='C':
a,b = map(int, pt)
merge(a,b)elifop=='Q1':
a,b = map(int, pt)if find(a)==find(b):
print('Yes')
else:
print('No')
else:
a = int(pt[0])
print(cnt[find(a)])```## 835Trie字符串统计```bash
n = int(input())
N =100010
tree =[[0]*26 for_in range(N)]
idx =1
cnt =[0]*N
def insert(x):
# 不要忘记global
global idx
p =0foriin x:
u = ord(i)-ord('a')if not tree[p][u]:
tree[p][u]=idx
idx +=1
p = tree[p][u]
cnt[p]+=1
def query(x):
p =0foriin x:
u = ord(i)-ord('a')if not tree[p][u]:
# 不要忘记return
print(0)return
else:
p= tree[p][u]
print(cnt[p])returnfor_in range(n):
# 字符串接收,不要僵硬化地用*
op, pt = input().split()ifop=='I':
insert(pt)
else:
query(pt)