// priority_queue --- куча
// set
// java -- TreeSet HashSet
// c++ -- set hash_set
// 1e5 + 3, 1e6 + 3, 2e6 + 3 --- простые
const int N = (int)1e6 + 3;
// 1..10^9
int h[N], f[N], deleted[N];
// h[i] = a
// f[i] = "f[a]"
// h[i] = 0 <=> empty cell
// f[i] = 0 --- default value
// int f[(int)1e9]
// add, find
inline int get( int a )
{
int i = a % N;
while (h[i] && h[i] != a)
if (++i == N)
i = 0;
return i; // f[i], a --> f[get(a)]
}
inline void set_f( int a, int x )
{
int i = get(a);
h[i] = a, f[i] = x, deleted[i] = 0;
}
inline int get_f( int a )
{
if (!h[a] || deleted[a])
return -1;
return f[get(a)];
}
inline void delete_a( int a )
{
deleted[get(a)] = 1;
}
// inline --- ускоряет, не делает вызов функции
int main()
{
set_f(239, 1);
int a = get_f(239);
deleted_a(239);
set_f(239, 1);
int a = get_f(239);
}
// "abcdef" ---> Hash("abcdef")
// f[get(Hash("abcdef"))]