二分
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,...