首先这占位法的思路很棒,而邻接表法相比于它就显得简单无脑的多
但我就是纳闷了,为什么用
define int long long 来代替int整形就会出错,会超时!!!我真是无语至极!!!(蒟蒻的无能狂怒)
如果有大佬知道问题出在哪里,麻烦告诉本蒟,本蒟将不胜感激/(ㄒoㄒ)/~~
占位法的思路比较特别,通过取余来控制数据范围(有离散化的思想)
题目数据只有1e5,而我们开了2e5的数组,空间一定够用,装得下所有插入的数,而装数的顺序都是从(a%N+N)%N开始然后++…如果在途中经过了P,也就是未被占用的位置,那么这个数就是未插入的
#include <bits/stdc++.h>
using namespace std;
//#define int long long
const int N = 200003, P = 0x3f3f3f3f;
int a[N+1];
int n, aa,cnt = 0;
int find(int x)
{
int k = (x % N + N) % N;
for (int i = k; i <= N; i++)
{
if (a[i] == P || a[i]==x) return i; // (种草的 || 判断的)
if (i == N) i = 0;
}
}
int main()
{
memset(a, 0x3f, sizeof a);
cin >> n;
while (n--)
{
string c;
cin >> c >> aa;
if (c == "I") a[find(aa)] = aa;
else{
if (a[find(aa)] == P) cout << "No" << endl;
else cout << "Yes" << endl;
}
}
return 0;
}