一般求解方法
void discrete(){ sort(a+1,a+n+1); for(int i=1;i<=n;i++){ if(i==1||a[i]!=a[i-1]){ b[++m]=a[i]; } } } int query(int x){ return lower_bound(b+1,b+m+1,x)-b;//返回b[1]到b[m]之间第一个大于等于x的元素位置 }
当然c++stl库里有一个函数名叫unique
unique本身是用于去重 正是离散化所需要的
void discrete(){ sort(a+1,a+n+1); int sz=unique(a+1,a+n+1)-(a+1); } int query(int x){ return lower_bound(b+1,b+m+1,x)-b;//返回b[1]到b[m]之间第一个大于等于x的元素位置 }