[知识点]离散化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[知识点]离散化相关的知识,希望对你有一定的参考价值。
今天刷内网的题,一道题要用离散,于是我就用了常用的map去搞
但是A了之后发现,我的速度竟然在rank list垫底T-T
然后xyz大神告诉我map离散慢的要死,于是我就再去学习一下主流的(也可能是非主流)离散打法
需要用STL中的vector(也可以不用),unique去重,lower_bound查找
#include<iostream> #include<vector> #include<cstdio> #include<algorithm> using namespace std; #define pos(i,a,b) for(int i=(a);i<=(b);i++) #define N 100 int n,b[N]; vector<int> a; int my_find(int x){ return lower_bound(a.begin(),a.end(),x)-a.begin()+1;//找到x是第几个 } int main(){ cin>>n; pos(i,1,n){ cin>>b[i];a.push_back(b[i]); } sort(a.begin(),a.end());//排序 a.erase(unique(a.begin(),a.end()),a.end());//去重之后从vector中清除 pos(i,1,n){ cout<<my_find(b[i])<<" "; } return 0; }
以上是关于[知识点]离散化的主要内容,如果未能解决你的问题,请参考以下文章