樹狀陣列 BZOJ 4240 有趣的家庭菜園

2021-07-13 04:01:11 字數 663 閱讀 1454

%%%popoqqq

從小到大列舉高度,由於無論將這株草移動到左側還是右側都對比它高的植物沒有影響,因此貪心選擇代價最小的方向即可 

故答案為∑min(a[1…i-1]中大於a[i]的數的數量,a[i+1…n]中大於a[i]的數的數量) 

#include#include#includeusing namespace std;

typedef long long ll;

inline char nc()

return *p1++;

}inline void read(int &x)

const int n=300005;

struct bit

inline void add(int x,int r)

inline int sum(int x)

inline int sum(int l,int r)

}bit1,bit2;

int n,a[n];

int sx[n],icnt;

inline int bin(int x)

int main()

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

printf("%lld\n",ans);

return 0;

}

bzoj 4240 有趣的家庭菜園 樹狀陣列

隨手寫了一發rank1什麼鬼。因為4239有點繁瑣,就先跳過去了。然後看完這道題目就懵逼了。o o 但是仔細想想會發現對於一棵草,它的移動是不會影響到比它更高的草的,因此我們可以從小到大移動草,並且貪心地移動到較小的一邊,換句話說令f i,j,k 表示i j中比k大的數的個數,那麼對於某一棵草 x,...

bzoj4240 有趣的家庭菜園 樹狀陣列

這一題最終要構造的序列顯然是乙個單峰序列 首先有乙個結論 乙個序列通過交換相鄰的元素,進行排序,最少的交換次數為該序列的逆序對個數 該結論很久之前打表意外發現的,沒想到用上了。考慮如何構造這個單峰序列 首先最大的數肯定是該序列的峰,餘下的元素我們從大到小列舉,判斷將其加入到當前序列的左邊還是右邊。將...

BZOJ4240 有趣的家庭菜園 樹狀陣列 貪心

對家庭菜園有興趣的joi君每年在自家的田地中種植一種叫做ioi草的植物。joi君的田地沿東西方向被劃分為n個區域,由西到東標號為1 n。ioi草一共有n株,每個區域種植著一株。在第i個區域種植的ioi草,在春天的時候高度會生長至hi,此後便不再生長。為了觀察春天的樣子而出行的joi君注意到了ioi草...