洛古 P1020 飛彈攔截 貪心 二分

2021-08-22 02:56:16 字數 1198 閱讀 3888

題目描述

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。

輸入飛彈依次飛來的高度(雷達給出的高度資料是 ≤50000 \le 50000≤50000 的正整數),計算這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

輸入輸出格式

輸入格式:

111 行,若干個整數(個數 ≤100000 \le 100000≤100000 )

輸出格式:

222 行,每行乙個整數,第乙個數字表示這套系統最多能攔截多少飛彈,第二個數字表示如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。

輸入輸出樣例

輸入樣例#1:

389 207 155 300 299 170 158 65

輸出樣例#1: 6 2

題意:很明了讓你求最長不上公升子串行 和 最長上公升子串行,主要的坑點就在於要分析好邏輯,二分函式要寫好,也可以直接用c++的內建函式

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5+5;

const

int inf = 0x3f3f3f3f;

int v[maxn];

int low[maxn],high[maxn];

int pos1,pos2;

int bin_search1(int *a,int r,int x)//返回a陣列中第乙個小於等於x的位置

return l;

}//int bin_search2(int *a,int r,int x)//返回a陣列中第乙個大於等於x的位置

//// return l;

//}int main() else

}low[1] = v[1];

for (int i = 2;i<=s;i++) else

} printf("%d\n%d\n",pos2,pos1);

return

0;}

洛谷P1020 飛彈攔截

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷達給出...

洛谷 P1020 飛彈攔截

題目大意 對於乙個飛彈攔截系統 它的第一發炮彈能夠攔截任意高度的飛彈,但之後攔截的每一發炮彈都不能高於前一發的高度。輸入n發飛彈依次飛來的高度a i 計算這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。1 n 100 0 a i 30000 題解 p i 表示攔截了第...

洛谷 P1020 飛彈攔截

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷達給出...