給定每頭牛前面有幾頭牛比它高,求出所有牛的最小身高(整數)
用乙個陣列b[
i]b [i
],一開始全都是1,每次查詢第ai
+1a i+
1個1即為每頭牛的身高,之後再把對應的位置佔掉
可以用樹狀陣列+二分查詢對應的位置,當然也可以用倍增+樹狀陣列快速求得
#include
#include
#include
using
namespace
std;
int n,a[8001],h[8001],c[8001],power[31],lgn,x;
inline
void add(register
int x,register
int k)//單點修改
inline
int ask(register
int x)//查詢
signed main()
for(register
int i=1;i<=n;i++) printf("%d\n",h[i]);
}
樹狀陣列POJ2155
poj 2155是一道很不錯的題目,表面上看,這題的要求似乎和樹狀陣列的使用方法恰好相反,改變的是乙個區間,查詢的反而是乙個點。實際上可以通過乙個轉化巧妙的解決。首先對於每個數a定義集合up a 表示 定義集合down a 表示。可以發現對於任何a於是對於這道題目來說,翻轉乙個區間 a,b 為了便於...
poj 2481(樹狀陣列)
這題樹狀陣列明顯可解,不解釋,但是注意有相同的奶牛的處理 include include include include define n 100005 using namespace std int c n tem struct dian d n int cmp dian a,dian b int...
poj 2481 樹狀陣列
解法2 按si值做降序排序後,相當於求每個位置i左邊大於等於e i 的個數 樹狀陣列更新節點的路徑和求和的路徑要改變,getsum i 相當於求i i 1 maxn include include using namespace std const int maxn 100010 int sum m...