ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

离散化小记

2019-11-01 14:51:06  阅读:244  来源: 互联网

标签:ae int ll mid bound 离散 小记


感觉现在写个啥都得搞离散化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]);
}

虽然费事,但跑的快

标签:ae,int,ll,mid,bound,离散,小记
来源: https://www.cnblogs.com/lcez56jsy/p/11776994.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有