日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

整数二分板子

發布時間:2025/4/5 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整数二分板子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

整數二分板子
對于一個區間,給定一個性質, 一半區間(不一定等分)滿足這個性質,另一半區間不滿足這個性質,二分可以查找這個邊界。

找到右邊綠顏色的邊界點

step1:找中間值 mid=(l+r)/2
step2:if(check(mid)) 這里的是check一下mid是否滿足綠色這個性質,
如果check為true,說明mid滿足這個性質,則mid一定在右半邊區間內,則要找的答案在左邊區間 [l,mid]內,這里mid是閉區間。更新方式是r=mid
如果check為false ,則mid 位于左半部分,即紅色這個區間,此時正確答案在[mid+1,r ] ,更新方式:l=mid+1;

模板為

int bsearch_1(int l,int r){while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;} }

找到左邊紅色的邊界點
step1:找中間值 mid=(l+r)/2,注意這里要改,只是作為第一步思考的話,可以這樣寫。實際上寫到后面,這里需要寫成mid=(l+r+1)/2,當使用l=mid時,記得補上+1
step2:if(check(mid)) 這里的是check一下mid是否滿足紅色這個性質,
如果check為true,說明mid滿足這個性質,則mid一定在左半邊區間內,則要找的答案在 右邊區間[mid,r]內,這里mid是閉區間。更新方式是l=mid
如果check為false ,則mid 位于右半部分,即綠色這個區間,此時正確答案在[l,mid-1 ] ,更新方式:r=mid-1;

模板為

//區間[l,r]倍劃分為[l,mid-1]和[mid,r]時使用 int bsearch_2(int l, int r){while(l<r){int mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}return 1; }

找到右邊綠色的邊界點

數的范圍

模板題

數的范圍
給定一個按照升序排列的長度為n的整數數組,以及 q 個查詢。

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

如果數組中不存在該元素,則返回“-1 -1”。

輸入格式
第一行包含整數n和q,表示數組長度和詢問個數。

第二行包含n個整數(均在1~10000范圍內),表示完整數組。

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

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

如果數組中不存在該元素,則返回“-1 -1”。

數據范圍
1≤n≤100000
1≤q≤10000
1≤k≤10000
輸入樣例:

6 3 1 2 2 3 3 4 3 4 5

輸出樣例:

3 4 5 5 -1 -1

分析:
第一個位置:一定是后面的元素都是大于等于它的,前面的元素都是小于它的。
最后一個位置:一定是前面的元素都是小于等于它的,后面的元素都是大于它的。

仍然需要提醒:當 l=mid時,需要保留+1,該邊界需要清除。
ac代碼

#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn=1e5+10; int n,m; int q[maxn];int main(){scanf("%d%d",&n,&m);for(int i=0;i<n;i++) scanf("%d",&q[i]);for(int i=0;i<m;i++){int x;scanf("%d",&x);int l=0,r=n-1;while(l<r){int mid=l+r>>1;if(q[mid]>=x) r=mid;//為什么大于等于?是因為求第一個x,后面的都大于等于xelse l=mid+1;}if(q[l]!=x) printf("-1 -1\n");else {printf("%d ",l);int l=0,r=n-1;while(l<r){int mid=l+r+1>>1;if(q[mid]<=x) l=mid;//為什么小于等于?是因為求最后一個x,需要前面的都小于等于xelse r=mid-1;}printf("%d \n",l);}}}

補充
upper_bound()函數,該函數返回第一個大于待查數的迭代器。
lower_bound()函數,返回第一個大于等于待查數的迭代器。

lower_bound()在區間中如果找不到一個數,可能返回end(),即數組中最后一個元素下標的下一個位置。同時也可能返回第一個大于該數的位置
比如在下面序列中要查找2,此時返回的是1,即第一個3的下標。

cout<<lower_bound(a,a+n,k)-a; 1 3 3 4 4 6 1

由于該特性,上題不能使用lower_bound等庫函數來做
會出現如下錯誤,附上錯誤代碼

#include<iostream> #include<algorithm> using namespace std;const int maxn=100010;int n,q,k,a[maxn];int main(){cin>>n>>q;for(int i=0;i<n;i++) cin>>a[i];while(q--){cin>>k;if(lower_bound(a,a+n,k)-a==n) cout<<"-1 -1"<<endl;//誤以為一個數不在數組中,就返回迭代器end(),else{int l=lower_bound(a,a+n,k)-a;int r=upper_bound(a,a+n,k)-a-1;cout<<l<<" "<<r<<endl;}}return 0; }

錯誤代碼的輸出

輸入 6 3 1 3 3 4 4 6 2 8 3輸出 1 0//在查詢2時出現的問題 -1 -1 1 2 標準答案 -1 -1 -1 -1 1 2

總結

以上是生活随笔為你收集整理的整数二分板子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲资源在线观看 | 免费成人深夜夜视频 | 国产精久久| 欧美老熟妇一区二区三区 | 操批网站 | www.成人免费视频 | www.黄色网 | 中文字幕一区二区三区在线观看 | 国内精品福利视频 | 国产.com | 亚洲色图 一区二区 | 精品久久久在线观看 | 黄色网址在线免费看 | 国内露脸中年夫妇交换 | 成年人黄色一级片 | 日韩人妻无码精品久久久不卡 | 久热精品在线观看 | 成年激情网 | 五十路妻 | 日本毛片在线 | 三级av免费看| 国产日产精品一区二区三区四区 | 国产老妇视频 | 国产一区二区三区视频免费在线观看 | wwwxx欧美| 五月婷婷婷婷 | 黄色激情在线 | 美女视频久久久 | 亚洲成a人片在线 | 国产精品久久久久久99 | 欧美乱日 | 欧美日韩爱爱 | 天天干免费视频 | 国产jzjzjz丝袜老师水多 | 久久国产精品精品国产 | 那里有毛片看 | 精品国产露脸精彩对白 | 亚洲精品无码不卡在线播he | 国产成人在线看 | 男人的天堂avav | 午夜影视体验区 | 成 人片 黄 色 大 片 | 亚洲成a人v欧美综合天堂麻豆 | 色噜噜在线播放 | 亚洲成人午夜电影 | 韩国黄色av | 一级a毛片免费观看久久精品 | 日韩中文在线字幕 | 3d欧美精品动漫xxxx无尽 | 日日cao| 空姐吹箫视频大全 | 国产视频一区二区三区在线 | 欧美性猛交一区二区三区精品 | 日本www色视频 | 久草黄色| 黄色小视频在线观看 | 三级在线看中文字幕完整版 | 五月天视频网站 | 亚洲精品久久久久久久久久久 | 精品国产乱码久久久久久婷婷 | 91精东传媒理伦片在线观看 | 亚洲综合久久久 | av青青 | 激情av小说| 国产精品一区二区三区四区在线观看 | 精品成人一区二区三区久久精品 | 日韩精品一区二区三区不卡 | 亚洲69av| 欧美一级片在线免费观看 | 国产一区二区电影 | 国产视频不卡一区 | 男生女生操操操 | 大肉大捧一进一出视频 | 色婷婷亚洲一区二区三区 | 野花视频免费在线观看 | 乱图区 | 大黑人交xxx极品hd | 三级做爰在线观看视频 | 肮脏的交易在线观看 | 伊人网址 | 久久99精品久久久久久噜噜 | 精品日韩一区二区三区四区 | 国产精品污www在线观看 | 欧美人与性动交α欧美片 | 玖玖热视频 | 欧美成人777 | 色花av | av 日韩 人妻 黑人 综合 无码 | 91成年视频| 91大神一区二区 | 国产精品边吃奶边做爽 | 72pao成人国产永久免费视频 | 欧美黄色录像视频 | 丁香婷婷一区二区三区 | 亚洲成a人v | 国产一区二区三区精品愉拍 | 欧美性猛交一区二区三区精品 | 日韩av一区二区在线观看 | 精品人妻伦一区二区三区久久 |