离散化作用就是把值域较大的数据建立一个映射放到值域较小的范围里面.
离散化步骤:1
2
3
4
5sort(dat+1,dat+1+n);
m=unique(dat+1,dat+1+n)-dat-1;
//m是实际不重合元素个数.
//tmp是每个元素离散化之后的值(排名).
tmp=upper_bound(dat+1,dat+1+m,val)-dat-1;
对应函数解释:sort排序,啥也不说是默认从小往大排序.写cmp可以实现自定义排序规则.upper_bound是二分返回第一个大于元素的地址.lower_bound二分返回第一个不小于元素的地址.
排序规则
排序标准用<连接的就是结果.比如1
2
3
4char cmp(node a,node b){
if(a.a==b.a)return a.b>b.b;
return a.a<b.a;
}
以上代码首先按照a从小到大(<的顺序)排序,a一样按b从大到小排序.
附:函数调用未知函数的格式是这样:1
2
3
4
5
6
7
8
9
10
11char cmp(node a,node b){
return a.a>b.a;
}
void ssort(node* head,char cc(node a,node b)){
if(cc(tmp,ttmp)){
//交换...
}
}
//使用:
ssort(stuhead,cmp11);
//函数名字写上就行了...程序会自动调用
排序的时候有用,多重排序规则可以一个排序函数完成多种排序,大大降低码量.