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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STL之lower_bound,upper_bound二分查找函数 结构体

發布時間:2023/12/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL之lower_bound,upper_bound二分查找函数 结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

codeforces上的代碼是開放的,常常就能看到本渣與大神們的差距

比如二分查找。。。

1.在數組中,找出第一個4所在位置

輸入:

14 4 1 2 2 3 4 4 4 4 5 6 7 9 9 10

這是本鶸代碼。。。。。。。

#include <stdio.h> int a[1010],n; int main(){int i,l,r,mid,b;scanf("%d%d",&n,&b);for(i=1;i<=n;i++)scanf("%d",&a[i]);l=0,r=n;while(l+1<r){mid=(l+r)/2;if(a[mid]<b)l=mid;else r=mid;//a[mid]>=b}if(a[r]==b)printf("%d\n",r);//找數字b出現在最左側else printf("NO\n");return 0; }

輸出:

然而大神是這樣寫的:

#include <cstdio> #include <algorithm> using namespace std; int a[1010],n; int main(){int i,b,pos;scanf("%d%d",&n,&b);for(i=1;i<=n;i++)scanf("%d",&a[i]);pos=lower_bound(a+1,a+1+n,b)-a;//找數字b出現在最左側if(pos==n+1||a[pos]!=b)printf("NO\n");else printf("%d\n",pos);//a[pos]==b;return 0; }

2.在數組中,找出最后一個4所在位置

輸入:

14 4 1 2 2 3 4 4 4 4 5 6 7 9 9 10

這是本鶸代碼。。。。。。。

#include <stdio.h> int a[1010],n; int main(){int i,l,r,mid,b;scanf("%d%d",&n,&b);for(i=1;i<=n;i++)scanf("%d",&a[i]);l=1,r=n+1;while(l+1<r){mid=(l+r)/2;if(a[mid]<=b)l=mid;else r=mid;}if(a[l]==b)printf("%d\n",l);//找數字b出現在最右側else printf("NO\n");return 0; }

然而大神是這樣寫的:

#include <cstdio> #include <algorithm> using namespace std; int a[1010],n; int main(){int i,b,pos;scanf("%d%d",&n,&b);for(i=1;i<=n;i++)scanf("%d",&a[i]);pos=upper_bound(a+1,a+1+n,b)-a;//找數字b出現在最右側if(pos==n+1||a[pos-1]!=b)printf("NO\n");else printf("%d\n",pos-1);//a[pos-1]==b;return 0; }

3.用法

頭文件:#include <algorithm>

時間復雜度:一次查詢O(log n),n為數組長度。

圖示:

lower_bound:

功能:查找非遞減序列[first,last) 內第一個大于或等于某個元素的位置。

返回值:如果找到,則返回找到元素的地址;否則返回last的地址。(這樣不注意的話會越界,小心)

用法:int t=lower_bound(a+l,a+r,key)-a;(a是數組)。

upper_bound:

功能:查找非遞減序列[first,last) 內第一個大于某個元素的位置。

返回值:如果找到,則返回找到元素的地址;否則返回last的地址。(同樣這樣不注意的話會越界,小心)

用法:int t=upper_bound(a+l,a+r,key)-a;(a是數組)。

摘自https://blog.csdn.net/lwgkzl/article/details/82851346

結構體中查找:

把我們需要查找的數封裝成一個結構體。然后才可以在結構體重進行查找。即使我們只需要針對某一維進行查找,也需要把整個結構體構造出來。

代碼如下:

struct MY{int a,b;MY(){}MY(int a,int b):a(a),b(b){}bool operator<(const MY m)const{ //定義比較方式,這一步很重要return a<m.a;} };int main(){MY m[10];for(int i=0;i<10;i++){m[i] = MY(i+1,2*i);cout<<m[i].a<<" "<<m[i].b<<endl;}cout<<"請輸入你需要查找的數字a:"<<endl;int num;cin>>num;sort(m,m+10);//進行二分之前需要排序int aa = lower_bound(m,m+10,MY(num,0)) - m; //需要把我們查找的數封裝成一個結構體才能進行查找。cout<<"查到位置為:"<<aa<<endl;return 0; }

這里我只需要查找第一維,并且我對第一維進行了排序,只有有序數列才可以進行二分,然后在查找的時候,把其他維置零即可。但是必須要封裝成一個結構體

vector中也是同理:

代碼:

struct MY{int a,b;MY(){}MY(int a,int b):a(a),b(b){}bool operator<(const MY m)const{ //定義比較方式,這一步很重要return a<m.a;} };int main(){vector<MY>ve;for(int i=0;i<10;i++){ve.push_back(MY(i+1,2*i));cout<<ve[i].a<<" "<<ve[i].b<<endl;}cout<<"請輸入你需要查找的數字a:"<<endl;int num;cin>>num;sort(ve.begin(),ve.end());//進行二分之前需要排序int aa = lower_bound(ve.begin(),ve.end(),MY(num,0)) - ve.begin(); //需要把我們查找的數封裝成一個結構體才能進行查找。cout<<"查到位置為:"<<aa<<endl;return 0; }

ve.begin()指向vector的開始,ve.end()指向vector的結尾。

結果如下:

?摘自https://blog.csdn.net/codehappy123/article/details/97814162

輸入N個字符串后,排個序,同時記錄他在未排序之前的編號。所以這需要結構體。然后就是對結構體排序。之后需要在最快時間內找到前綴為s的第一個字符串,需要使用二分中 的lower_bound() 所以我們需要運用重載運算符,重新定義查找規則。

值得注意的是lower_bound()中第三個參數也必須是一個結構體,所以你需要將前綴字符串s封裝成結構體才可以查詢。
?

#include <bits/stdc++.h> using namespace std; struct node {int i;string s;bool operator<(const node m)const{return s<m.s;} }hah[1000006]; char ch[1000006]; bool cmp(struct node x,struct node y) {return x.s<y.s; } int main() {int n,m;scanf("%d %d",&n,&m);for(int i=0;i<n;i++){scanf("%s",ch);hah[i].s=ch;hah[i].i=i;}sort(hah,hah+n,cmp);while(m--){string c;int k;struct node kk;scanf("%d %s",&k,ch);c=ch;kk.s=c;int tt=lower_bound(hah,hah+n,kk)-hah;if(hah[tt+k-1].s.find(c)!=0)printf("-1\n");else printf("%d\n",hah[tt+k-1].i+1);}return 0; }

?

總結

以上是生活随笔為你收集整理的STL之lower_bound,upper_bound二分查找函数 结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费aa视频 | 日韩av一区二区三区四区 | 在线播放波多野结衣 | 日韩一区二区三区在线看 | 手机在线免费视频 | 一级黄色录像免费观看 | 亚洲一区播放 | 婷婷激情小说 | av大片免费看 | av小说在线观看 | 朝桐光av在线 | 国产美女一区二区三区 | 91 高清 在线 制服 偷拍 | 国产在线观看一区二区三区 | 色超碰 | 成人做爰69片免费看 | 中字幕一区二区三区乱码 | 成人免费视频网址 | 国内精品视频一区二区三区 | 久久艹综合 | 国内精品久久久久久久久久久 | 成人精品福利视频 | 久草福利资源 | 美日韩三级 | 偷自在线| 久久久国| 国产做爰高潮呻吟视频 | 色草在线 | 日韩乱码人妻无码中文字幕 | 日本三级中文字幕在线观看 | 免费啪视频在线观看 | 日韩一区二区视频在线播放 | 91视频最新| 动漫美女舌吻 | 国产日韩在线一区 | 日韩精品无 | 欧美无砖专区免费 | 一卡二卡久久 | 不卡国产视频 | 欧美播放器| 色婷婷狠| 亚日韩 | 宅男午夜在线 | 羞羞的软件| 深夜视频在线看 | 色老头在线一区二区三区 | 久久不卡日韩美女 | www日韩视频 | 四虎影视免费看 | 国产乱一区二区三区 | 国产色| 欧美大尺度床戏做爰 | 久久精品无码毛片 | 一区二区三区四区五区在线视频 | 99热这里| 国产高清一区在线观看 | 亚洲在线一区二区三区 | 日本在线免费观看视频 | 国模大胆一区二区三区 | 国产精品久热 | 亚洲国产成人综合 | 日韩一区二区免费在线观看 | 久久国产精品99久久人人澡 | 亚洲欧美网站 | 秋霞视频在线观看 | 日韩xx视频 | 欧美日韩一区二区区别是什么 | 麻豆md0077饥渴少妇 | 国产美女免费视频 | 韩国三级在线播放 | 国产精品日日摸天天碰 | 用力使劲高潮了888av | 国产精品ww | 神马影院午夜伦理片 | 日韩国产欧美一区 | 精品女同一区二区 | 日日操狠狠干 | 欧美一区二区三区不卡视频 | 国产调教视频在线观看 | 久久精品99久久久久久久久 | 精品无码久久久久久久久 | 手机免费av| 影音先锋成人资源 | 日本黄色录象 | 成人超碰| 欧美性大战久久久久xxx | 明日花绮罗高潮无打码 | 亚洲成av人在线观看 | 龚玥菲一级淫片 | 啪啪影音| 欧美日韩一区二区精品 | 成人av小说 | 在线观看av国产一区二区 | 亚洲免费黄网 | 伊人久久香 | 91热精品| 一本久道久久 | 免费国产视频在线观看 | 激情内射亚洲一区二区三区爱妻 |