离散化后要求大小排序
输入完成后再离散化
可以$a->b$和$a<-b$
vector<int> nums;
int Hash(int x)
{
return lower_bound(nums.begin(),nums.end(),x)-nums.begin();
}
int main()
{
scanf("%d",&x);
nums.push_back(x);
//继续输入abaabaaba...
sort(nums.begin(),nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end());
//O(1)查询使用离散化之后的值,先预处理:a->b
x=Hash(x);
//然后x就是离散化之后的值
//查询离散化之前的值:a<-b
int y=nums[x];
return 0;
}
离散化后不要求大小排序
可以边输入边离散化
只能$a->b$
int hidx;
unordered_map<int,int> h;
int Hash(int x)
{
if(h.count(x)) return h[x];
return h[x]=++hidx;
}
int main()
{
int x;
scanf("%d",&x);
int y=Hash(x);
//abaabaaba...
}