Advertisement
MAGCARI

TOI19 Merge

May 29th, 2023
682
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. /*
  2.     Task    : _example
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 29 May 2023 [19:56]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int pos,num;
  11.     bool operator < (const A&o){
  12.         if(pos != o.pos)    return pos < o.pos;
  13.         else                return num < o.num;
  14.     }
  15. };
  16. A a[100010],b[100010];
  17. int main(){
  18.     cin.tie(0)->sync_with_stdio(0);
  19.     cin.exceptions(cin.failbit);
  20.     int n,m,q;
  21.     cin >> n >> m >> q;
  22.     for(int i=1;i<=n;i++)
  23.         cin >> a[i].pos;
  24.     for(int i=1;i<=n;i++)
  25.         cin >> a[i].num,a[i].num+=a[i-1].num;
  26.     for(int i=1;i<=m;i++)
  27.         cin >> b[i].pos;
  28.     for(int i=1;i<=m;i++)
  29.         cin >> b[i].num,b[i].num+=b[i-1].num;
  30.  
  31.     while(q--){
  32.         int alpha,beta,k;
  33.         cin >> alpha >> beta >> k;
  34.         int l = min(a[1].pos,b[1].pos * alpha + beta);
  35.         int r = max(a[n].pos,b[m].pos * alpha + beta);
  36.         while(l<r){
  37.             int mid = floor((l+r)/2.0);
  38.             A temp = {mid,(int )1e9};
  39.             int idxA = upper_bound(a+1,a+n+1,temp)-a-1;
  40.             temp.pos = (mid-beta)/alpha;
  41.             int idxB = upper_bound(b+1,b+m+1,temp)-b-1;
  42.             if(a[idxA].num + b[idxB].num < k)
  43.                 l = mid+1;
  44.             else
  45.                 r = mid;
  46.         }
  47.         cout << l << '\n';
  48.     }
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement