AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 校园
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

AcWing 4279. 笛卡尔树 0.01 AC币

作者: 作者的头像   hpstory ,  2022-06-23 21:12:21 ,  所有人可见 ,  阅读 1


0


#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;
const int N = 40;

int n;
int q[N];
vector<int> level[N];

int get_min(int left, int right){
    int res = left;
    for (int i = left; i <= right; i ++ )
        if (q[res] > q[i])
            res = i;

    return res;
}

void dfs(int left, int right, int d){
    if (left > right) return;
    int root = get_min(left, right);
    level[d].push_back(q[root]);
    dfs(left, root - 1, d + 1);
    dfs(root + 1, right, d + 1);
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++) cin >> q[i];
    dfs(0, n - 1, 0);

    for (int i = 0; level[i].size(); i ++ )
        for (int x: level[i])
            cout << x << ' ';
    return 0;
}

0 评论

你确定删除吗?

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息