📌  相关文章
📜  在 C++ STL 中使用 Set 计算右侧较小的元素(1)

📅  最后修改于: 2023-12-03 15:07:37.654000             🧑  作者: Mango

在 C++ STL 中使用 Set 计算右侧较小的元素

在 C++ STL 中,Set 是一个非常有用的数据结构,可以用来存储有序不重复的元素集合。Set 内部实现了二叉搜索树,因此具有快速的查找、插入和删除操作。

而在一些算法问题中,我们需要计算一个元素右侧的较小元素个数,这时就可以使用 Set 来解决。具体做法是,从右往左遍历数组,将每个元素插入 Set 中,并计算 Set 中当前元素个数减去该元素在 Set 中的排名即可。以下是一个具体的实现示例:

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
int a[N], ans[N];

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    set<int> s;
    for (int i = n; i >= 1; i--) {
        s.insert(a[i]);
        ans[i] = s.size() - distance(s.begin(), s.find(a[i]));
    }
    for (int i = 1; i <= n; i++) {
        cout << ans[i] << " ";
    }
    cout << endl;
    return 0;
}

上面的代码依次从右往左遍历数组,并将每个元素插入 Set 中,然后计算 Set 中当前元素个数减去该元素在 Set 中的排名,即为该元素右侧的较小元素个数。最后输出答案即可。

在这个算法中,需要注意 Set 中元素的排名计算方式。Set 中元素排名是从 0 开始计算的,因此可以使用 distance 函数来计算当前元素在 Set 中的排名。

总之,Set 是一个非常有用的数据结构,在一些算法问题中可以发挥重要作用。