感觉现在写个啥都得搞离散化orz
目前已知的离散化方式:
1.手写多累,用map啊(可能会被卡掉)
map<int,int>即可
2.vector离散化(应该没有手写快,不过一般不会被卡)
我们将要离散化的所有数存进vector里,排序。查询一个数被离散化之后的值用lower_bound即可
for(int i=1;i<=n;i++)
a[i]=read(),vec.push_back(a[i]);//vec就是定义的vector
sort(vec.begin(),vec.end());
for(int i=1;i<=n;i++)
a[i]=lower_bound(vec.begin(),vec.end(),c)-vec.begin()+1;//下标从1开始
3.参照vector离散化的思路,手写离散化
就是把所有元素存进一个数组里(在你知道上限的情况下),排序,手写lower_bound即可
int n,be[N],ae[N],t;//N根据题目确定
int lower_bound(int kkk)
{
int ll=1,rr=t;
while(ll<=rr)
{
int mid=(ll+rr)>>1;
if(ae[mid]==kkk) return mid;
if(ae[mid]>kkk)rr=mid-1;
else ll=mid+1;
}
if(ae[ll]>kkk)ll--;//写丑了的lower_bound
return ll;
}
int main()
{
for(int i=1;i<=n;i++)
{
be[i]=read();ae[i]=be[i];
}
sort(ae+1,ae+1+n);
t=unique(ae+1,ae+1+n)-ae-1;
for(int i=1;i<=n;i++)
be[i]=lower_bound(be[i]);
}
虽然费事,但跑的快