Advertisement
999ms

SEGMENT_TREE_VISUALISATION

Oct 30th, 2020
2,103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define all(x) begin(x), end(x)
  3.  
  4. using namespace std;
  5. using ll = long long;
  6.  
  7. vector<string> Build(int v, int tl, int tr, vector<int>& a) {
  8.     int mx = *max_element(begin(a) + tl, begin(a) + tr);
  9.     string cur = string("[") + to_string(tl) + string(",") + to_string(tr) + string("):{") + to_string(mx) + string("}");
  10.     if (tl + 1 < tr) {
  11.         int tm = (tl + tr) >> 1;
  12.         auto left = Build(v * 2 + 1, tl, tm, a);
  13.         auto right = Build(v * 2 + 2, tm, tr, a);
  14.         int h = max(left.size(), right.size()) + 3;
  15.         int w = max({cur.size(), left[0].size() + 1 + right[0].size()});
  16.        
  17.         int left_from = 0;
  18.         int right_from = left[0].size() + 1;
  19.         vector<string> answer(h, string(w, ' '));
  20.         for (int i = 0; i < cur.size(); i++) {
  21.             answer[0][i] = cur[i];
  22.         }
  23.         answer[1][0] = '|';
  24.         answer[2][0] = 'v';
  25.         for (int i = 0; i < left.size(); i++) {
  26.             for (int j = 0; j < left[0].size(); j++) {
  27.                 answer[3 + i][j] = left[i][j];
  28.             }
  29.         }
  30.         answer[1][2] = '+';
  31.         answer[1][right_from] = '+';
  32.         for (int i = 3; i < right_from; i++) {
  33.             answer[1][i] = '-';
  34.         }
  35.         answer[2][right_from] = 'v';
  36.         for (int i = 0; i < right.size(); i++) {
  37.             for (int j = 0; j < right[0].size(); j++) {
  38.                 answer[3 + i][j + right_from] = right[i][j];
  39.             }
  40.         }
  41.         return answer;
  42.     } else {
  43.         return {cur};
  44.     }
  45. }
  46.  
  47. int main() {
  48.     ios_base::sync_with_stdio(false);
  49.     cin.tie(nullptr);
  50.     cout.tie(nullptr);
  51.     int n;
  52.     cin >> n;
  53.     vector<int> a(n);
  54.     for (int i = 0; i < n; i++) {
  55.         cin >> a[i];
  56.     }
  57.     auto ans = Build(0, 0, n, a);
  58.     for (auto& s : ans) {
  59.         cout << s << '\n';
  60.     }
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement