[知识点]离散化

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;
}

  

以上是关于[知识点]离散化的主要内容,如果未能解决你的问题,请参考以下文章

渲染管道光栅阶段一“总览”

渲染管道光栅阶段一“总览”

离散化的思想和它的两种代码与区别

数据离散化

AcWing 2014. 岛(离散化+差分)

Matlab的Simulink连续模型离散化代码自动生成C语言(简明教程)