/*离散化是什么:一些数字,他们的范围很大(0-1e9),
但是个数不算多(1-1e5),并且这些数本身的数字大小不重要
,重要的是这些数字之间的相对大小
(比如说某个数字是这些数字中的第几小,而与这个数字本身大小没有关系,要的是相对大小)
(6 8 9 4 离散化后即为 2 3 4 1)(要理解相对大小的意思)
(6在这4个数字中排第二小,那么就把6离散化成2,与数字6本身没有关系, 8,9,4亦是如此)
*/
#if 0
//离散化(相同元素离散化后不同)
struct node {
int x, idx;
bool operator <(const node &t)const {
return x < t.x;
}
} A[MAXN];
int rnk[MAXN];
int n;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &A[i].x);
A[i].idx = i;
}
for (int i = 1; i <= n; i++) {
printf("%d %d\n", A[i].idx, A[i].x);
}
printf("\n");
sort(A + 1, A + n + 1);
for (int i = 1; i <= n; i++) {
printf("%d %d\n", A[i].idx, A[i].x);
}
printf("\n");
for (int i = 1; i <= n; i++) {
rnk[A[i].idx] = i;
printf("rank[%d]=%d\n", A[i].idx, i);
}
printf("\n");
for (int i = 1; i <= n; i++) {
printf("%d ", rnk[i]);
}
return 0;
}
#endif
#if 0
//离散化(相同元素离散化后相同)
int a[MAXN];
int b[MAXN];
int t[MAXN];
int n;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", a + i);
t[i] = a[i];
}
sort(t + 1, t + n + 1);
int m = unique(t + 1, t + n + 1) - t - 1;
for (int i = 1; i <= n; i++) {
b[i] = lower_bound(t + 1, t + 1 + m, a[i]) - t;
}
for (int i = 1; i <= n; i++) {
printf("%d ", b[i]);
}
return 0;
}
#endif
线性离散化
最新推荐文章于 2023-12-27 16:11:27 发布
本文详细介绍了离散化技术的概念及应用,通过实例演示了如何将连续的数据转换为离散形式,强调了数据相对大小的重要性,并提供了两种离散化的实现方式。
2008

被折叠的 条评论
为什么被折叠?



