牛客 FBI樹(線段樹 後續遍歷)

2021-09-27 08:01:46 字數 834 閱讀 8222

我這種方法不是最簡單的方法,不過我覺得比較好理解

題意:給出乙個01字串,每次從中間折取建成乙個二叉樹,若子樹都是0則是b樹,都是1則是i樹,否則為f樹,求出該樹的後續遍歷

思路:首先我想到的是這個建樹過程和線段樹很像,每個節點儲存的是以該點為根的什麼樣的樹,0代表b樹,1代表i樹,2代表f樹。接著我又想到了資料結構中學過的鏈式二叉樹的後續遍歷。

code:

#include #include #include #include #include #define ls node*2 + 1    // 左兒子

#define rs node*2 + 2 // 右兒子

using namespace std;

const int n = 10000;

string str;

int tree[n];

vectorve;

int pow2(int n)

void push_up(int node)

// 建樹

void build(int start, int end, int node)

int mid = (start + end) / 2; // 每次從中間折取

build(start, mid, ls);

build(mid + 1, end, rs);

push_up(node);

}// 後續遍歷,左右根

void postorder(int node)

int main()

cout << endl;

return 0;

}

牛客網 剩下的樹 線段樹入門

mn o mn o mn 複雜度都可以過,可以見得資料之水當然這道題的資料量本身也是符合這個複雜度的,ps fill和memset別用得太多,有時候會被卡死 include include include include include include include include using n...

sequence 牛客 ( 線段樹)

題面 your are given two sequences a1 n,b1 n a b a1 n b1 n you need to answer max 1 l r n displaystyle max times sum b 1 l r nmax 1e 6 b i 1e 6 1e6 1 e6 ...

帶 sin, cos 的線段樹 牛客

題意 給你 n 個數字,第一種操作是將乙個區間內每乙個數字加上同乙個數字,第二種操作是求乙個區間內每乙個數 sin 的累加和 思路分析 對於每個區間維護一下 cos 和 sin 的值,當乙個區間要加上乙個數字時,此時再重新計算 sin的值時 sin a x sin a cos x cos a sin...