Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Task : _example
- Author : Phumipat C. [MAGCARI]
- Language: C++
- Created : 29 May 2023 [19:56]
- */
- #include<bits/stdc++.h>
- using namespace std;
- struct A{
- int pos,num;
- bool operator < (const A&o){
- if(pos != o.pos) return pos < o.pos;
- else return num < o.num;
- }
- };
- A a[100010],b[100010];
- int main(){
- cin.tie(0)->sync_with_stdio(0);
- cin.exceptions(cin.failbit);
- int n,m,q;
- cin >> n >> m >> q;
- for(int i=1;i<=n;i++)
- cin >> a[i].pos;
- for(int i=1;i<=n;i++)
- cin >> a[i].num,a[i].num+=a[i-1].num;
- for(int i=1;i<=m;i++)
- cin >> b[i].pos;
- for(int i=1;i<=m;i++)
- cin >> b[i].num,b[i].num+=b[i-1].num;
- while(q--){
- int alpha,beta,k;
- cin >> alpha >> beta >> k;
- int l = min(a[1].pos,b[1].pos * alpha + beta);
- int r = max(a[n].pos,b[m].pos * alpha + beta);
- while(l<r){
- int mid = floor((l+r)/2.0);
- A temp = {mid,(int )1e9};
- int idxA = upper_bound(a+1,a+n+1,temp)-a-1;
- temp.pos = (mid-beta)/alpha;
- int idxB = upper_bound(b+1,b+m+1,temp)-b-1;
- if(a[idxA].num + b[idxB].num < k)
- l = mid+1;
- else
- r = mid;
- }
- cout << l << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement