Pythonのsetは1エントリーあたり90バイトも食っている。 10Mエントリー前後でatcoderの1024MBのメモリ制限に引っかかる。 定義域が[0, N)ならnp.zeros(N, np.bool_)がよい。座標圧縮でその形に持ち込むのも良さそう。

mprof python

x = set()
for i in range(9_000_000):
    x.add(i)
  • image

python

import numpy as np
x = np.zeros(9_000_000, np.bool_)
for i in range(9_000_000):
    x[i] = 1
  • image