Submission #1287269

#TimeUsernameProblemLanguageResultExecution timeMemory
1287269tunademayoSelf Study (JOI22_ho_t2)C++20
0 / 100
1 ms572 KiB
#include<bits/stdc++.h>
using namespace std;

#define ll long long 

const bool Multitest = 0;

const int N = 3e5 + 10;

ll a[N], b[N]; int n, m;

bool check(ll val)
{
	ll cnt = 0;
	
	for(int i = 1 ; i <= n ; i++)
	{
		if(a[i] < b[i])
		{
			if(b[i] * n < val) return 0;
			
			int l = 0, r = n, pos = -1;
			
			while(l <= r)
			{
				int mid = (l + r) >> 1;
				
				if(a[i] * mid + b[i] * (n - mid) >= val) l = mid + 1, pos = mid;
				else r = mid - 1;
			}
			
			if(pos == -1) return 0;
			
			cnt += pos;
		}
	}
	
	for(int i = 1 ; i <= n ; i++)
	{
		if(a[i] < b[i]) continue;
		
		if(a[i] * n > val)
		{
			int l = 1, r = n, pos = 0;
			
			while(l <= r)
			{
				int mid = (l + r) >> 1;
				
				if(a[i] * mid >= val) l = mid + 1, pos = mid;
				else r = mid - 1;	
			}	
			
			cnt += pos;
		}
		else 
		{
			int l = 1, r = n * m, pos = -1;
			
			while(l <= r)
			{
				int mid = (l + r) >> 1;
			
				if(a[i] * n + b[i] * mid >= pos) r = mid - 1, pos = mid;
				else l = mid + 1;
			}	
			
			if(pos == -1) return 0;
			
			cnt -= pos;
		}	
	}
	
	return cnt >= 0;
}

void work()
{
	cin >> n >> m;
	
	for(int i = 1 ; i <= n ; i++) cin >> a[i];
	for(int i = 1 ; i <= n ; i++) cin >> b[i];
	
	ll l = 1, r = 1e18, pos = -1;
	
//	cout << check(18) << '\n';
//	
//	return;
//	
	while(l <= r)
	{
		ll mid = (l + r) >> 1;
		
		if(check(mid)) l = mid + 1, pos = mid;
		else r = mid - 1;	
	}	
	
	cout << pos;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);	cout.tie(0);
	
	int q = 1;
	
	if(Multitest)	cin >> q;
	
	while(q--) work();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...