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

2022-09-16 19:24:16 字數 1870 閱讀 6487

整數二分步驟:

找乙個區間[l,r],使得答案一定在該區間中

找乙個判斷條件,使得該條件具有二段性,並且答案一定是該二段性的分界點

分析中點m在該判斷條件下是否成立,如果成立,考慮答案在哪個區間;如果不成立,考慮答案在哪個區間;

如果更新方式寫的是r = mid,,則不用做任何處理;若更新方式寫的是l = mid,則需要在計算mid上加1

789. 數的範圍

int find_l(int x)

return l;

}int find_r(int x)

return l;

}

實數較為稠密,對邊界問題要求較低

790. 數的三次方根

#include#include#includeusing namespace std;

double double_binary(double x)

else if(mid*mid*mid > x)

}return l;//精度差值符合範圍,輸出任意均可

}int main()

730. 機械人跳躍問題

bool check(int x)//x表示起始能量

return true;//沒有出現小於0的情況,符合題意的x

}int binary_search()//二分找到能完成任務的最小的初始能量值,用從左邊找的模板

return l;

}int main()

int res = binary_search();

cout<1221. 四平方和

}sort(sum,sum+cnt);//按照sum,c,d關鍵字公升序排序

for(int a=0;a*a<=n;a++)//公升序列舉a和b

if(sum[l].s == n-a*a-b*b)}}

return 0;

}1227. 分巧克力

#include#includeusing namespace std;

const int n = 1e5+10;

int n,k;

int h[n],w[n];

bool check(int x)//x表示切除的正方形邊長,x越大,分的個數越少,反之越大,

return false;

}int main()

cout<1230. k倍區間

解題思路:

二分和字首和(藍橋)

二分 1.數的範圍 題意 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。1 n 100010,q 10000.對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 思路 對於已經排好序的,且要求查詢陣列中某乙個數的位置,屬於搜尋類...

二分與字首和

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

字首和 二分

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...