#include <stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
/***
i / 32 对应具体数组元素
i % 32 对应具体数组元素的bit位
i >> SHIFT == i / 32
i & MASK == i % 32
****/
void set(int i)
{
a[i>>SHIFT] |= (1 < <(i & MASK));
}
void clr(int i) {
a[i>>SHIFT] &= ~(1 < <(i & MASK));
}
int test(int i){
return a[i>>SHIFT] & (1 < <(i & MASK));
}
int main(){
int i;
for (i = 0; i < N; i++)
clr(i);
while (scanf("%d", &i) != EOF)
set(i);
for (i = 0; i < N; i++)
if (test(i))
printf("%d\n", i);
return 0;
}
位图运算
最新推荐文章于 2024-07-02 15:09:42 发布