考前看 57 插入區間 二分 區間合併

2021-10-19 09:41:47 字數 1047 閱讀 1479

### 解題思路

利用二分法找到合適的位置插入區間

1.列舉特殊情況:插入最左端和插入最右端

2.找到第乙個區間,使得區間的右端點大於目標區間的左端點

3.找到第二個區間,使得區間的右端點大於目標區間的右端點

4.處理一種特殊情況,就是這個區間單獨成為區間段,不與其他區間合併

### **

class solution 

return l;

}vector> insert(vector>& intervals, vector& newinterval)

//列舉特殊情況:插入最左端和插入最右端

if(newinterval[1] < intervals[0][0])

if(newinterval[0] > intervals[n-1][1])

//找到第乙個區間,使得區間的右端點大於目標區間的左端點

int lp = binsearch(0,n-1,left,intervals);

int rp = binsearch(0,n-1,right,intervals);

//找到第二個區間,使得區間的右端點大於目標區間的右端點

for(int i = 0; i < lp; ++i) res.push_back(intervals[i]);

//處理一種特殊情況,就是這個區間單獨成為區間段,不與其他區間合併

int il,ir,p;

il = min(intervals[lp][0],newinterval[0]);

if(newinterval[1] < intervals[rp][0]) ir = newinterval[1],p = rp;

else ir = max(intervals[rp][1],newinterval[1]),p = rp+1;

res.push_back();

for(; p < intervals.size();++p) res.push_back(intervals[p]);

return res;

}};

hdu 5875(ST 二分區間)

題意 給乙個序列,有n個數字和m次詢問。每次詢問給乙個區間,問這個區間從l開始一直對l後面的陣列取模,一直到r。分析 乙個較小的數字對乙個較大的數字取模,值不發生改變。所以每次只要找最近的比自己小的數字取模更新答案即可。用rmq維護區間最小值。每次查詢乙個區間就在這個區間內進行二分。如果左區間有比l...

二分查詢 二分區間 快速冪(二分冪)

include include using namespace std 二分查詢 初始區間 0,n 1 intbinarysearch int a,int left,int right,int x else return 1 二分 找出元素的區間左閉右開 初始區間 0,n intlower boun...

HDU 4768 (二分區間 漲姿勢)

題意 告訴n組a,b,c,按照a k c生成等差數列,問這n組數列中哪個數字出現了奇數次以及出現了幾次,題目保證最多隻會出現乙個這種數字。分析 讀完題並沒有思路,後來知道是二分區間,列舉是哪個數字出現了奇數次,算該數字之前一共有幾個數字,如果是奇數個,說明答案就在 l mid 中。ps 之前用二分只...