數的範圍 二分

2021-10-01 11:47:07 字數 1182 閱讀 1727

題目描述

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。

對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。

如果陣列中不存在該元素,則返回「-1 -1」。

輸入格式

第一行包含整數n和q,表示陣列長度和詢問個數。

第二行包含n個整數(均在1~1000010000範圍內),表示完整陣列。

接下來q行,每行包含乙個整數k,表示乙個詢問元素。

輸出格式

共q行,每行包含兩個整數,表示所求元素的起始位置和終止位置。

如果陣列中不存在該元素,則返回「-1 -1」。

資料範圍

1≤n≤1000001≤n≤100000

1≤q≤100001≤q≤10000

1≤k≤100001≤k≤10000

輸入樣例:

6 31 2 2 3 3 434

5輸出樣例:

3 45 5

-1 -1

#include

using

namespace std;

const

int n=

100050

;int f[n]=;

void

expand

(int mid,

int t)

//擴充套件,找數的範圍;

else

break;}

while(1

)else

break;}

cout<" "<}void

search

(int start,

int end,

int t)

//二分

if(t>f[mid]

)search

(mid+

1,end,t)

;else

if(t)search

(start,mid,t)

;else

if(t==f[mid])}

intmain()

for(

int i=

1;i<=m;i++

)return0;

}

總結:乙個題目,如果乙個區間具有單調性質,那麼一定可以二分,但是如果說這道題目沒有單調性質,而是具有某種區間性質的話,我們同樣可以使用二分.

數的範圍 二分

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...

數的範圍 整數二分

給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q行,每...

典型二分問題 數的範圍

題目描述 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下...