結果
問題 | No.2195 AND Set |
ユーザー |
![]() |
提出日時 | 2023-03-07 11:04:52 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 731 ms / 2,000 ms |
コード長 | 1,267 bytes |
コンパイル時間 | 314 ms |
コンパイル使用メモリ | 82,100 KB |
実行使用メモリ | 87,796 KB |
最終ジャッジ日時 | 2024-09-18 02:06:03 |
合計ジャッジ時間 | 10,861 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 13 |
ソースコード
# セグメントツリーでfuncをANDにすればいいか# いや、セグメントツリーにするリストがない、または、長くなりすぎる# setでどの数字があるかを管理、31桁のバイナリに1が何回出てきたかを管理でどうかbinary_count = [0]*33visited = set()add = 0Q = int(input())for q in range(Q):query = list(map(int, input().split()))if query[0] == 1:x = query[1]if x not in visited:visited.add(x)add += 1for shift in range(32):if x>>shift & 1 == 1:binary_count[32-shift] += 1elif query[0] == 2:x = query[1]if x in visited:visited.discard(x)add -= 1for shift in range(32):if x>>shift & 1 == 1:binary_count[32-shift] -= 1elif query[0] == 3:if len(visited) == 0:print(-1)elif add == 0:print(0)else:ans = 0for i in range(32, -1, -1):if binary_count[i] == add:ans += 2**(32-i)print(ans)#print('add', add, 'visited', visited, 'binary_count', binary_count)