Advertisement
Haholchik

bnsearch

Jan 21st, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.     long long bforb(long long arr[],const long long n,long long minn,long long item,long long maXs){
  6.     long long guess,low,high,mid;
  7.     low=minn+1;
  8.     high=maXs;
  9.     mid=(low+high)/2;
  10.     guess=arr[mid];
  11.     while(low<=high){
  12.        mid=(low+high)/2;
  13.     guess=arr[mid];
  14.         if(guess==item){
  15.             return 1;
  16.         }
  17.         else if(guess>item){
  18.             high=mid-1;
  19.         }
  20.         else{
  21.             low=mid+1;
  22.         }
  23.  
  24.     }
  25.  
  26.     return 0;
  27.  
  28.     }
  29. void draw(long long arr[],const long long n){
  30. cout<<endl<<endl;
  31. for(long long i = 0;i<n;i++){
  32.     cout<<arr[i]<<" ";
  33. }
  34. cout<<endl<<endl;
  35. }
  36. long long SPbsearch(long long arrq[],const long long n, long long item){
  37.     long long low,high,mid,guess,Count=0;
  38.         Count=0;
  39.         low=0;
  40.         high=n-1;
  41.         mid=(low+high)/2;
  42.         guess=arrq[mid];
  43.         while(low<=high){
  44.                 mid=(low+high)/2;
  45.             guess=arrq[mid];
  46.             if(guess==item){
  47.             for(long long i=mid;i<n;i++){
  48.                    // cout<<endl<<endl<<"              "<<arrq[i]<<endl<<endl;
  49.                    if(arrq[i]!=item){
  50.                     break;
  51.                    }
  52.                 if(bforb(arrq,n,i,item,n-1)==1){
  53.                     Count++;
  54.                 }
  55.             }
  56.             for(long long i=mid;;i--){
  57.                 //cout<<endl<<endl<<"                            "<<arrq[i]<<endl<<endl;
  58.                 if(arrq[i]!=item){
  59.                     break;
  60.                    }
  61.                 if(bforb(arrq,n,-1,item,i)==1){
  62.                     Count++;
  63.                 }
  64.             }
  65.             if(Count>0){
  66.                 return Count;
  67.             }
  68.             else {
  69.                     return 0;
  70.             }
  71.         }
  72.             else if(guess>item){
  73.                 high=mid-1;
  74.         }
  75.             else{
  76.                 low=mid+1;
  77.         }
  78.     }
  79.  return Count;
  80. }
  81.  
  82. int main()
  83. {
  84.     long long n,m;
  85.     cin>>n;
  86.     long long arr[n];
  87.     for(long long i=0;i<n;i++){
  88.         cin>>arr[i];
  89.     }
  90.     cin>>m;
  91.     long long arrm[m];
  92.     for(long long i=0;i<m;i++){
  93.         cin>>arrm[i];
  94.     }
  95.     //draw(arrm,m);
  96.     //draw(arr,n);
  97.     for(long long i=0;i<m;i++){
  98.         cout<<SPbsearch(arr,n,arrm[i])<<endl;
  99.     }
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement