题解 | 【模板】集合操作
【模板】集合操作
https://www.nowcoder.com/practice/a37b91f84cdf490b8d8b990794211135
import bisect
M = []
def insertValue(x):
# TODO: 实现插入逻辑
pos = bisect.bisect_left(M,x)
# 所有在它左边的元素都 < x , pos是第一个>=x的位置
if pos == len(M) or M[pos]!=x:
M.insert(pos,x)
pass
def eraseValue(x):
# TODO: 实现删除逻辑
pos = bisect.bisect_left(M,x)
if pos < len(M) and M[pos] == x:
M.pop(pos)
pass
def xInSet(x):
# TODO: 实现存在性检查
pos = bisect.bisect_left(M,x)
return pos < len(M) and M[pos] == x
pass
def sizeOfSet():
# TODO: 返回集合大小
return len(M)
pass
def getPre(x):
# TODO: 实现找前驱
pos = bisect.bisect_left(M,x) # 第一个 >=x 的位置
if pos > 0:
return M[pos-1]
else:
return -1
pass
def getBack(x):
# TODO: 实现找后继
pos = bisect.bisect_right(M,x) # 第一个 >x 的位置
if pos < len(M):
return M[pos]
else:
return -1
pass
def main():
q = int(input())
for _ in range(q):
line = map(int,input().split())
cnt,op,x=0,0,0
for i in line:
if(cnt==0):
op=i
else:
x=i
cnt+=1
if op == 1:
insertValue(x)
elif op == 2:
eraseValue(x)
elif op == 3:
print("YES" if xInSet(x) else "NO")
elif op == 4:
print(sizeOfSet())
elif op == 5:
print(getPre(x))
elif op == 6:
print(getBack(x))
if __name__ == "__main__":
main()

