离散化

sort(t+1,t+1+n);

m=unique(t+1,t+1+n)-t-1;//m为不重复的元素的个数

原序列:6 9 4 6 4

排序后:4 4 6 6 9

unique(元素去掉重复的)后:4 6 9 6 9  (前m位数字无重复,其他数字跟排序后的序列想比不改变)

unique有一个返回值,例如有十个有序的数列3 3 5 5 6 6 6 7 7 8,不重复的数字有五个,使用unique去重之后数列变成了3 5 6 7 8 6 6 7 7 8,它只改变了前五个数字后边的不变,返回值是 最后一个改变的数字的地址。so:m=unique(t+1,t+1+n)-t-1;一般要减去首地址(t+1),m为不重复的数字的个数

附上代码:

int a[maxn],b[maxn];
for(int i = 1; i < n; i++) {
	b[i] = a[i];
}
map<int,int>ma;
sort(b + 1,b + 1 + n);
int cnt = 1;
for(int i = 1; i <= n; i++) {
	if(i == 1) {
		ma[b[i]] = cnt;
	} else {
		if(b[i] != b[i - 1]) {
			ma[b[i]] = ++cnt;
		} else {
			ma[b[i]] = cnt;
		}
	}
}
for(int i = 1; i <= n; i++) {
	a[i] = ma[a[i]];
}