樹狀陣列 二分 謎一樣的牛

2021-10-02 13:39:38 字數 1013 閱讀 6156

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

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

輸入格式

第1行:輸入整數n。

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

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

輸出格式

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

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

資料範圍

1 ≤n

≤105

1≤n≤10^5

1≤n≤10

5輸入樣例:51

210輸出樣例:24

531這次樹狀陣列的意義是l,r區間內我們可以選擇的高度數量,並且對於單點來說如果這個值為1那麼代表沒有選,為0代表選了。因為樹狀陣列新增的值是字首和,一定滿足單調性,所以可以二分來查詢第乙個第k大的值。然後選了這個高度的牛再刪除就好了。

#include

//#define int long long

using

namespace std;

const

int n=

2e5+7;

#define lowbit(x) (x&(-x))

int n,m,tree[n]

;int a[n]

,res[n]

;void

add(

int x,

int c)

}int

ask(

int x)

return ans;

}int

main()

res[i]

=l;add

(r,-1)

;}for(

int i=

1;i<=n;i++

)printf

("%d\n"

,res[i]);

}

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

題目描述 有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頭牛前面沒有牛,所以並沒有將...