Kali_prasad

floor queries using merge sort

Mar 20th, 2022 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void merge(vector<long long> &v,int left,int right)
  4. {
  5.     int mid=(left+right)/2;
  6.     vector<long long> temp(v.size());
  7.     int p1=left,p2=mid+1,k=0;
  8.     while(p1!=mid+1&&p2!=right+1)
  9.     {
  10.         if(v[p1]<v[p2])
  11.         temp[k++]=v[p1++];
  12.         else
  13.         temp[k++]=v[p2++];
  14.     }
  15.     while(p1!=mid+1)
  16.       temp[k++]=v[p1++];
  17.      while(p2!=right+1)
  18.       temp[k++]=v[p2++];
  19.      k=0;
  20.      for(int i=left;i<=right;i++)
  21.      {
  22.          v[i]=temp[k++];
  23.      }
  24.    
  25. }
  26. void ms(vector<long long> &v,int left,int right)
  27. {
  28.     if(left==right)
  29.     return ;
  30.     int mid=(left+right)/2;
  31.     ms(v,left,mid);
  32.     ms(v,mid+1,right);
  33.     merge(v,left,right);
  34.    
  35. }
  36.  
  37. int query(vector<long long> v,int q)
  38. {
  39.     int left=0,right=v.size()-1,mid;
  40.     long long ans=INT_MIN;
  41.      while(left<=right){
  42.        
  43.         mid=(left+right)/2;
  44.        // cout<<ans<<endl;
  45.         if(v[mid]==q)
  46.         {
  47.             ans=q;
  48.             break;
  49.         }
  50.         else if(v[mid]<q)
  51.         {  left=mid+1;
  52.             ans=v[mid];
  53.            
  54.         }
  55.         else
  56.         right=mid-1;
  57.     }
  58.     return ans;
  59. }
  60.  
  61. int main()
  62. {
  63.     int size;
  64.     cin>>size;
  65.     vector<long long> v;
  66.     for(int i=0;i<size;i++)
  67.     {
  68.         long long temp;
  69.         cin>>temp;
  70.         v.push_back(temp);
  71.     }
  72.    
  73.     ms(v,0,v.size()-1);
  74.    
  75.     int z;
  76.     cin>>z;
  77.     vector<long long> q(z),ans(z);
  78.      for(int i=0;i<z;i++)
  79.     {
  80.         cin>>q[i];
  81.          ans[i]+=query(v,q[i]);
  82.     }
  83.     for(auto x:ans)
  84.     cout<<x<<endl;
  85.    
  86.    
  87.    
  88.    
  89.    
  90.  
  91. }
Add Comment
Please, Sign In to add comment