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

2021-07-26 07:07:44 字數 1052 閱讀 5197

說出來你可能不信,今天又被秀了。

1287

加農炮

codility

乙個長度為m的正整數陣列a,表示從左向右的地形高度。測試一種加農炮,炮彈平行於地面從左向右飛行,高度為h,如果某處地形的高度大於等於炮彈飛行的高度h(a[i] >= h),炮彈會被擋住並落在i - 1處,則a[i - 1] + 1。如果h <= a[0],則這個炮彈無效,如果h > 所有的a[i],這個炮彈也無效。現在給定n個整數的陣列b代表炮彈高度,計算出最後地形的樣子。

例如:地形高度a = , 炮彈高度b = ,最終得到的地形高度為:。

input

第1行:2個數m, n中間用空格分隔,分別為陣列a和b的長度(1 <= m, n <= 50000)

第2至m + 1行:每行1個數,表示對應的地形高度(0 <= a[i] <= 1000000)。

第m + 2至n + m + 1行,每行1個數,表示炮彈的高度(0 <= b[i] <= 1000000)。

output

輸出共m行,每行乙個數,對應最終的地形高度。
input示例

9 1112

0432

1572

8076

5345

65

output示例

222

4335

67

其實一開始看到這道題我想用二分查詢,但是原佇列未排序,並且不能離線處理。然後覺得該用線段樹存下區間裡的最高點和位置。

然後想了很久沒成功,最後看了下題解。其實一開始二分的思路是對的,只不過要構造成上公升序列,然後二分查位置。如果乙個山峰前有乙個山峰比他高,那麼這個山峰無論如何都不會被炸到,所以這個山峰的高度可以先預設為之前山峰的最高值。 然後二分查,更新實際的高度。

#include #include using namespace std;

int a[50010];

int b[50010];

int main()

for(int i=0;i

51nod1287 加農炮 線段樹

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

51nod 1287 加農炮 好題啊好題

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

51NOD1287 加農炮 二分 預處理

51nod1287加農炮 題意 就是給你n個山,每個山的高度為h i 有m發炮彈,每發炮彈的高度為b i 每次炮彈只能打中 b i 的第一座山脈,並使這座山的前乙個刪高度上公升1,問m發炮彈之後每座山的高度 做法 這道題有乙個想法如果想到了就很好做,就是後面的山比前面矮的話就是沒用的,所以我們只要用...