标签:
40亿个数,如果用无符号的long long数组来存,那么使用数组里的每一个元素的每一位代表一个数,具体为:
a[0] ---- 0~63
a[1] ---- 64~127
a[2] ---- 128~190
...
那么,40亿 bit/64 = 6.25*107 *8 byte = 500MB , 内存就满足了。
#include <iostream> #include <bitset> #include <cstring> #include <vector> #include <algorithm> using namespace std; #define maxn 62500000 unsigned long long a[maxn]; int main() { unsigned n, m, x; while (cin >> n >> m) { memset(a, 0, sizeof(a)); for (int i=0; i<n; i++) { cin >> x; a[ x>>5 ] |= 1 << (x & 0x3F); } for (int i=0; i<m; i++) { cin >> x; if ( a[x>>5] & ( 1 << (x & 0x3F) ) ) { cout << "Yes" << endl; } else { cout << "No" << endl; } } } }
给40亿个不重复的unsigned int的数,没排序,然后再给一个数,如何快速间断这个数是否在那40亿个数中
标签:
原文地址:http://www.cnblogs.com/marginalman/p/4792878.html