##哈希表
哈希表的拉链储存
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3;
int h[N] , idx , e[N] , ne[N];//h[N]用于储存每一个的头结点
//idx 是一个下标的索引
void insert_(int x)
{
int k = (x % N + N) % N;
e[idx] = x;
ne[idx] = h[k];
h[k] = idx ++;
}
bool find_(int x)
{
int k = (x % N + N) % N;
for (int i = h[k] ; i != -1 ; i = ne[i])
{
if (e[i] == x) return true;
}
return false;
}
int main()
{
string op;
int n , x;
cin>>n;
memset(h, -1 , sizeof h);
while (n --)
{
cin>>op>>x;
if (op == "I") insert_(x);
else
{
if (find_(x)) puts("Yes");
else puts("No");
}
}
return 0;
}
//开发寻址法
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 3 , null = 0x3f3f3f3f;//一个不可能取到的值
int a[N];
int find_(int x)
{
int k = (x % N + N) % N;
while (a[k] != null && a[k] != x)
{
k ++;
if (k == N) k = 0;
}
return k;//返回的是找到的位置或者是应该填入的位置
}
int main()
{
int n;
cin>>n;
memset(a,null,sizeof a);
while (n --)
{
int x;
string op = "";
cin>>op>>x;
int k = find_(x);
if (op == "I")
{
a[k] = x;
}
else
{
if (a[k] != null) puts("Yes");
else puts("No");
}
}
return 0;
}