#include <ios> #include <iostream> #include <list> #include <queue> #include <set> #include <vector> int read_int() { int x; std::cin >> x; return x; } std::vector<int> read_vec(int n) { std::vector<int> v(n); for (int i = 0; i < n; ++i) { std::cin >> v[i]; } return v; } std::vector<std::list<int>> read_graph(int n) { const std::vector<int> input = read_vec(n); std::vector<std::list<int>> graph(n); for (size_t i = 0; i < input.size(); ++i) { for (size_t j = i + 1; j < input.size(); ++j) { if (input[i] > input[j]) { graph[i].push_back(j); graph[j].push_back(i); } } } return graph; } void bfs(const std::vector<std::list<int>> &graph, int v) { std::queue<std::pair<int, int>> q; int sum = 0; std::set<int> visited; visited.insert(v); for (auto i : graph[v]) { q.push(std::make_pair(i, 1)); } while (!q.empty()) { auto p = q.front(); q.pop(); if (visited.find(p.first) != visited.end()) { continue; } sum += p.second; visited.insert(p.first); for (auto i : graph[p.first]) { q.push(std::make_pair(i, p.second + 1)); } } std::cout << sum << " "; } int main() { std::ios::sync_with_stdio(false); const int N = read_int(); std::vector<std::list<int>> graph = read_graph(N); for (int i = 0; i < N; ++i) { bfs(graph, i); } std::cout << std::endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <ios> #include <iostream> #include <list> #include <queue> #include <set> #include <vector> int read_int() { int x; std::cin >> x; return x; } std::vector<int> read_vec(int n) { std::vector<int> v(n); for (int i = 0; i < n; ++i) { std::cin >> v[i]; } return v; } std::vector<std::list<int>> read_graph(int n) { const std::vector<int> input = read_vec(n); std::vector<std::list<int>> graph(n); for (size_t i = 0; i < input.size(); ++i) { for (size_t j = i + 1; j < input.size(); ++j) { if (input[i] > input[j]) { graph[i].push_back(j); graph[j].push_back(i); } } } return graph; } void bfs(const std::vector<std::list<int>> &graph, int v) { std::queue<std::pair<int, int>> q; int sum = 0; std::set<int> visited; visited.insert(v); for (auto i : graph[v]) { q.push(std::make_pair(i, 1)); } while (!q.empty()) { auto p = q.front(); q.pop(); if (visited.find(p.first) != visited.end()) { continue; } sum += p.second; visited.insert(p.first); for (auto i : graph[p.first]) { q.push(std::make_pair(i, p.second + 1)); } } std::cout << sum << " "; } int main() { std::ios::sync_with_stdio(false); const int N = read_int(); std::vector<std::list<int>> graph = read_graph(N); for (int i = 0; i < N; ++i) { bfs(graph, i); } std::cout << std::endl; return 0; } |