#6431: c++ 二分搜尋法TLE??


kikofish (fsh0524)

學校 : 國立交通大學
編號 : 20470
來源 : [114.137.3.122]
最後登入時間 :
2020-06-25 20:50:32
d732. 二分搜尋法 | From: [114.45.93.126] | 發表日期 : 2012-03-04 14:35

 這是我的程式碼
 
#include <cstdlib>
#include <iostream>

using namespace std;

int n,k,x,i,f,m,e,a[1000000];

void bs(int c)
{
     m=(f+e)/2;
     if(c==a[m]){cout<<m+1<<endl;}
     else if(c>a[m]){
          if(f==e){cout<<0<<endl;}
          else{
               f=m+1;
               bs(c);
               }
          }
     else if(c<a[m]){
          if(f==e){cout<<0<<endl;}
          else{
               e=m-1;
               bs(c);
               }
          }
}

int main()
{
    cin>>n>>k;
    for(i=0 ; i<n ; i++){cin>>a[i];}
    while(k--){
               cin>>x;
               f=0;
               e=n-1;
               if(x>a[e]||x<a[f]){cout<<0<<endl;}
               else{bs(x);}
               }
    return 0;
}
 
為什麼我都逾時TLE??
有沒有較快的解題方法 
 
#8916: Re:c++ 二分搜尋法TLE??


dibery (Bor)

學校 : 政治大學
編號 : 23441
來源 : [119.14.19.119]
最後登入時間 :
2016-04-07 01:20:18
d732. 二分搜尋法 | From: [61.70.197.124] | 發表日期 : 2014-06-28 00:08

請使用 C++ 的內建函式 lower_bound

編寫簡易又不會錯

 
#8917: Re:c++ 二分搜尋法TLE??


silithus (希利蘇斯)

學校 : 澳門培道中學
編號 : 33314
來源 : [60.246.116.246]
最後登入時間 :
2023-09-19 17:00:10
d732. 二分搜尋法 | From: [60.246.98.219] | 發表日期 : 2014-06-28 02:37

請使用 C++ 的內建函式 lower_bound

編寫簡易又不會錯


lower_bound固然好用,但作為基礎練習,還是自己動手寫比較好吧。  
#25659: Re:c++ 二分搜尋法TLE??


vic20050418@gmail.com (Wen Vic)

學校 : 國立臺灣科技大學
編號 : 153262
來源 : [114.136.159.95]
最後登入時間 :
2023-07-29 13:10:41
d732. 二分搜尋法 | From: [223.137.134.73] | 發表日期 : 2021-06-10 14:40

請IO優化:

ios_base::sync_with_stdio(false);

cin.tie(0);

並將endl替換成\n

 
ZeroJudge Forum