最近做的题(并查集之类的)都用到了数据离散化的技巧,之前没怎么重视过所以现在就稍微记录一下。
//a[i]为原数据集,b[i]为离散化后数据集,n为数据个数
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]; //m是去重后的个数,仅与问题数量有关
}
}
int query(int x) {
return lower_bound(b + 1, b + m + 1, x) - b; //使用原属于找到离散化后缩小的数据(大的找小的)
}
催更

贴吧表情好评
~~MarkDown???~~
好像评论不支持markdown,要不我魔改下这个模板算了...