struct HashTable { typedef ull T; typedef int S; static const int N = (int)1e6 + 7; static const int M = (int)1e5 + 7; int head[N], tot; struct Node { T fval; S sval; int nex; } a[M]; void clear() { memset(head, -1, sizeof(head)); tot = 0; } void insert(T fval, S sval) { int p = fval % N; a[tot].fval = fval; a[tot].sval = sval; a[tot].nex = head[p]; head[p] = tot++; } S find(T fval) { int p = fval % N; for(int i = head[p]; ~i; i = a[i].nex) { if(a[i].fval == fval) return a[i].sval; } return -1; } } Map;