樹狀陣列 二分查詢 謎一樣的牛

2021-09-22 22:39:48 字數 955 閱讀 1086

有n頭奶牛,已知它們的身高為 1~n 且各不相同,但不知道每頭奶牛的具體身高。

現在這n頭奶牛站成一列,已知第i頭牛前面有ai頭牛比它低,求每頭奶牛的身高。

輸入格式

第1行:輸入整數n。

第2…n行:每行輸入乙個整數ai,第i行表示第i頭牛前面有ai頭牛比它低。

(注意:因為第1頭牛前面沒有牛,所以並沒有將它列出)

輸出格式

輸出包含n行,每行輸出乙個整數表示牛的身高。

第i行輸出第i頭牛的身高。

資料範圍

1≤n≤105

輸入樣例:51

210輸出樣例:24

531這題目是乙個樹狀陣列+二分的題目。

思路:因為每乙個牛的編號都是從1-n的,所以如果找到i個牛比它小,那麼它的編號就是i + 1。所以乙個牛的編號就是統計乙個牛前面的比它矮的馬的數量+後面比它矮的馬的數量 + 1。

題目給的序列是第i頭牛前面有ai頭牛比它低。我們從後往前考慮,最後乙個牛的ai就是它的編號-1.

接下來,我們考慮到數第二個,我們需要找到在它後面的比它矮的數目加上前面的比它矮的數目就是一共比它矮的數目。這裡我們使用樹狀陣列加二分確定出答案。

#includeusing namespace std;

const int maxn = 1e5 + 5;

int tree[maxn], w[maxn];

int n;

int lowbit(int x)

void add (int num, int x)

}int get_sum(int num)

return ans;

}int main ()

w[i] = r;

add(r, -1);

}for (int i = 1; i <= n; i++)

return 0;

}

樹狀陣列 二分 謎一樣的牛

有n頭奶牛,已知它們的身高為 1 n 且各不相同,但不知道每頭奶牛的具體身高。現在這n頭奶牛站成一列,已知第i頭牛前面有ai頭牛比它低,求每頭奶牛的身高。輸入格式 第1行 輸入整數n。第2 n行 每行輸入乙個整數ai,第i行表示第i頭牛前面有ai頭牛比它低。注意 因為第1頭牛前面沒有牛,所以並沒有將...

謎一樣的牛(樹狀陣列 二分)

題目描述 有n頭奶牛,已知它們的身高為 1 n 且各不相同,但不知道每頭奶牛的具體身高。現在這n頭奶牛站成一列,已知第i頭牛前面有ai頭牛比它低,求每頭奶牛的身高。輸入格式 第1行 輸入整數n。第2 n行 每行輸入乙個整數ai,第i行表示第i頭牛前面有ai頭牛比它低。注意 因為第1頭牛前面沒有牛,所...

謎一樣的牛 樹狀陣列

有n頭奶牛,已知它們的身高為 1 n 且各不相同,但不知道每頭奶牛的具體身高。現在這n頭奶牛站成一列,已知第i頭牛前面有ai頭牛比它低,求每頭奶牛的身高。輸入格式 第1行 輸入整數n。第2 n行 每行輸入乙個整數ai,第i行表示第i頭牛前面有ai頭牛比它低。注意 因為第1頭牛前面沒有牛,所以並沒有將...