二分和字首和(藍橋)

2021-10-03 22:35:54 字數 1429 閱讀 2889

二分

1.數的範圍

題意:給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。1<=n<<100010,q<=10000.對於每個查詢,返回乙個元素k的起始位置和終止位置(位置從0開始計數)。如果陣列中不存在該元素,則返回「-1 -1」。

思路:對於已經排好序的,且要求查詢陣列中某乙個數的位置,屬於搜尋類問題,暴力太慢,用二分得到logn的時間。二分找到乙個數後,再向前搜尋和向後搜尋就可以找到第乙個和最後乙個數。

**:

#include #include #include using namespace std;

const int n=100010;

int a[n];

int main()

if(a[r]==x)

else

}return 0;

}

2.數的三次方根

題目:給定乙個浮點數n,求它的三次方根.

思路:對於浮點數,要考慮它的精度問題,二分查詢的條件稍微有點變化。

**:

#include #include using namespace std;

const int n=10010;

int main()

printf("%lf\n",l);

return 0;

}

1.字首和

題意:輸入乙個長度為n的整數序列。

接下來再輸入m個詢問,每個詢問輸入一對l, r。

對於每個詢問,輸出原序列中從第l個數到第r個數的和。

思路:字首和要做的就是預處理,輸入資料的時候用字首和陣列將字首和求出來(根據遞推)。

**:

#include #include using namespace std;

const int n=100010;

int a[n],s[n];

int main()

while(m--)

return 0;

}

2.子矩陣的和

題意:輸入乙個n行m列的整數矩陣,再輸入q個詢問,每個詢問包含四個整數x1, y1, x2, y2,表示乙個子矩陣的左上角座標和右下角座標。對於每個詢問輸出子矩陣中所有數的和。

思路:圖:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-eszp9oze-1584282805326)(c:\users\15209\pictures\部落格\juzhen.jpg)]

**:

#include #include using namespace std;

const int n=1010;

int a[n][n],s[n][n];

int main()

}while(q--)

return 0;

}

字首和 二分

powered by ab in 局外人 拿洛谷的乙個例子記一下字首和。資料超過了1e5,故o n 2 的演算法又行不通,所以換二分 include typedef long long ll using namespace std ll n,m,l,r ll a 1000001 sum 100000...

二分與字首和

時間複雜度o log n 資料區間 l mid r 實現 while l給定乙個按照公升序排列的長度為 n 的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素 k 的起始位置和終止位置 位置從 0 開始計數 如果陣列中不存在該元素,則返回 1 1。輸入格式 第一行包含整數 n 和 q,表示陣列...

藍橋杯 第二講 二分與字首和

整數二分步驟 找乙個區間 l,r 使得答案一定在該區間中 找乙個判斷條件,使得該條件具有二段性,並且答案一定是該二段性的分界點 分析中點m在該判斷條件下是否成立,如果成立,考慮答案在哪個區間 如果不成立,考慮答案在哪個區間 如果更新方式寫的是r mid,則不用做任何處理 若更新方式寫的是l mid,...