51NOD1287 加農炮 二分 預處理

2021-09-01 12:45:47 字數 741 閱讀 8162

51nod1287加農炮

題意

就是給你n個山,每個山的高度為h[i],有m發炮彈,每發炮彈的高度為b[i],每次炮彈只能打中》=b[i]的第一座山脈,並使這座山的前乙個刪高度上公升1,問m發炮彈之後每座山的高度

做法

這道題有乙個想法如果想到了就很好做,就是後面的山比前面矮的話就是沒用的,所以我們只要用另乙個陣列存乙個單調遞增的高度,如果後乙個山小於前乙個山的高度,就把他的高度改為前乙個山的高度,在這個序列上進行二分查詢,每次更新原來的陣列,如果原來的陣列上某個山的高度超過前乙個山的高度,那麼就在新陣列上更新,否則新陣列不更新,這樣就能保證新陣列一直是單調的,也就滿足二分性質,而且不會影響答案。

**

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+10;

int a[maxn]

,b[maxn]

,c[maxn]

;int

main()

for(

int i=

1;i<=n;i++

)printf

("%d\n"

,c[i]);

return0;

}

51nod1287 加農炮 構造順序序列 二分查詢

說出來你可能不信,今天又被秀了。1287 加農炮 codility 乙個長度為m的正整數陣列a,表示從左向右的地形高度。測試一種加農炮,炮彈平行於地面從左向右飛行,高度為h,如果某處地形的高度大於等於炮彈飛行的高度h a i h 炮彈會被擋住並落在i 1處,則a i 1 1。如果h a 0 則這個炮...

51nod 1287 加農炮(二分 線段樹)

1287 加農炮 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個長度為m的正整數陣列a,表示從左向右的地形高度。測試一種加農炮,炮彈平行於地面從左向右飛行,高度為h,如果某處地形的高度大於等於炮彈飛行的高度h a i h 炮彈會被擋住並落在...

51nod1287 加農炮 線段樹

乙個長度為m的正整數陣列a,表示從左向右的地形高度。測試一種加農炮,炮彈平行於地面從左向右飛行,高度為h,如果某處地形的高度大於等於炮彈飛行的高度h a i h 炮彈會被擋住並落在i 1處,則a i 1 1。如果h a 0 則這個炮彈無效,如果h 所有的a i 這個炮彈也無效。現在給定n個整數的陣列...