51nod1276島嶼的數量

2021-08-22 10:24:35 字數 1770 閱讀 3712

1276 島嶼的數量

基準時間限制:1 秒 空間限制:131072 kb 分值: 20 難度:3級演算法題

有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。

給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如:

島嶼的高度為:, 查詢為:。

當海面高度為0時,所有的島形成了1個島嶼。

當海面高度為1時,島1會被淹沒,總共有2個島嶼 。

當海面高度為3時,所有島都會被淹沒,總共0個島嶼。

當海面高度為2時,島0, 1, 3會被淹沒,總共有2個島嶼 。

input

第1行:2個數n, q中間用空格分隔,其中n為島的數量,q為查詢的數量(1 <= n, q <= 50000)。

第2 - n + 1行,每行1個數,對應n個島嶼的高度(1 <= a[i] <= 10^9)。

第n + 2 - n + q + 1行,每行乙個數,對應查詢的海平面高度(1 <= q[i] <= 10^9)。

output

輸出共q行,對應每個查詢的島嶼數量。
input示例

5 421

3230132

output示例

120

2

真的佩服自己...........乙個位置搞錯幾個小時沒看出來.....

#include#include#include#define maxn 50005

#define clear(a,b) memset(a,b,sizeof(a))

using namespace std;

struct node

is[maxn],que[maxn];

bool flag[maxn];

int ans[maxn];

bool cmp(node a,node b)

for(int i=0;i>que[i].h;

que[i].pos=i;

}sort(is,is+n,cmp);

sort(que,que+q,cmp);

clear(flag,false);

int j=0,cnt=1;

for(int i=0;i

}else if(is[j].pos==(n-1))

}else

else if(!flag[is[j].pos-1]&&!flag[is[j].pos+1])//兩邊都沒被淹

}flag[is[j++].pos]=true;

}ans[que[i].pos]=cnt;

}for(int i=0;i

cout<

return 0;

}/*10 10

//116

//40

//94

//31

//108

//98

//119

//34

//64

//36

//75

//39

//7//30

//44

//17

//81

//84

//114

//106

//3//3

//1//1

//4//1

//3//3

//2//3×/

51Nod 1276 島嶼的數量

1276 島嶼的數量 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n...

51Nod 1276 島嶼的數量 思維

題目 有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高...

51nod 1276 島嶼的數量(思維題)

有n個島連在一起形成了乙個大的島嶼,如果海平面上公升超過某些島的高度時,則這個島會被淹沒。原本的大島嶼則會分為多個小島嶼,如果海平面一直上公升,則所有島都會被淹沒在水下。給出n個島的高度。然後有q個查詢,每個查詢給出乙個海平面的高度h,問當海平面高度達到h時,海上共有多少個島嶼。例如 島嶼的高度為 ...