// 离散化 void discrete() { sort(a + 1, a + n + 1); for (int i = 1; i <= n; i++) // 也可用STL中的unique函数 if (i == 1 || a[i] != a[i - 1]) b[++m] = a[i]; } // 离散化后,查询x映射为哪个1~m之间的整数 void query(int x) { return lower_bound(b + 1, b + m + 1, x) - b; }