Advertisement
YEZAELP

CUBE-195: Infinite Lime (86%, BS * BS)

Jul 5th, 2021
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using lli = long long;
  5. const lli INF = 1e18;
  6. const int N = 7e5 + 10;
  7. lli num[N];
  8. lli m;
  9.  
  10. lli Find(lli x){
  11.     lli l = 1, r = m, mx = 0;
  12.     while(l <= r){
  13.         lli mid = (l + r)/ 2;
  14.         if((lli) num[mid] <= x){
  15.             mx = max(mx, mid);
  16.             l = mid + 1;
  17.         }
  18.         else
  19.             r = mid - 1;
  20.     }
  21.     return mx;
  22. }
  23.  
  24. lli Query(lli x){
  25.     lli l = 0, r = INF, mn = INF;
  26.     while(l <= r){
  27.         lli mid = (l + r) / 2;
  28.         lli cal = Find(mid);
  29.         if(mid - cal >= x){
  30.             mn = min(mn, mid);
  31.             r = mid - 1;
  32.         }
  33.         else
  34.             l = mid + 1;
  35.     }
  36.     return mn;
  37. }
  38.  
  39. int main(){
  40.  
  41.     lli k;
  42.     scanf("%lld%lld", &m, &k);
  43.  
  44.     for(int i=1;i<=m;i++)
  45.         scanf("%lld", &num[i]);
  46.  
  47.     sort(num + 1, num + m + 1);
  48.  
  49.     while(k--){
  50.         lli x;
  51.         scanf("%lld", &x);
  52.         printf("%lld ", Query(x));
  53.     }
  54.  
  55.     return 0;
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement