📜  使用C ++ STL中的set打印所有子数组的最小值(1)

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

使用C++ STL中的set打印所有子数组的最小值

在很多情况下,我们需要找到一个数组的所有子数组的最小值。这时,我们可以使用C++ STL中的set来解决这个问题。

如何使用set

set是一个自动排序的容器,其中的元素按照升序排列。我们可以使用它来存储数组的子数组,并在遍历时比较每个子数组的最小值。

以下是set的基本用法:

#include <iostream>
#include <set>

using namespace std;

int main() {
    set<int> s;

    s.insert(3);
    s.insert(1);
    s.insert(4);

    for (auto i : s) {
        cout << i << " ";
    }

    return 0;
}

输出:

1 3 4
打印所有子数组的最小值

如果我们要找到一个数组的所有子数组的最小值,我们可以使用set的lower_bound函数,在每个子数组中找到最小值,并将其添加到set中。在遍历set时,我们可以找到所有子数组的最小值。

以下是解决这个问题的完整代码:

#include <iostream>
#include <set>

using namespace std;

const int MAXN = 1e5 + 5;

int a[MAXN];

int main() {
    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    set<int> s;

    long long ans = 0;

    for (int i = 0; i < n; i++) {
        s.clear();
        for (int j = i; j < n; j++) {
            s.insert(a[j]);
            auto it = s.begin();
            ans += *it;
        }
    }

    cout << ans;

    return 0;
}

在上面的代码中,我们首先输入了数组a的长度n和所有元素。在内层循环中,我们首先将每个子数组的元素插入set中,然后使用s.begin()找到其最小值,并将其加到答案ans中。

最后,我们输出答案ans即为所有子数组中最小值的和。

总结

set是C++ STL中非常有用的一个容器,可以用于自动排序和查找元素的功能。在本例中,我们使用set找到一个数组的所有子数组的最小值,并将其加到答案中。这是一种非常高效的解决方案,可以在较短的时间内求出答案。