Submission #900571

#TimeUsernameProblemLanguageResultExecution timeMemory
900571LinkedArraySelf Study (JOI22_ho_t2)C++17
100 / 100
210 ms11716 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define int ll

#define pb push_back

const int MAX_N = 3e5;

int a[MAX_N + 5], b[MAX_N + 5];

bool check (int mij, int n, int m) {
	int i, sum, val, num_curs;
	
	sum = i = 0;
	num_curs = m * n;
	
	while (i < n && sum <= num_curs) {
		val = max(a[i], b[i]);
		
		sum++;
		if (val * m >= mij) {
			sum += ((mij - 1) / val);
		} else {
			if (val == b[i]) {
				sum += ((mij - 1) / b[i]);
			} else {
				sum += (m + (mij - val * m - 1) / b[i]);
			}
		}
		i++;
	}
	
	return (sum <= num_curs);
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
	
	int n, m, i, st, dr, mij;
	
	cin >> n >> m;
	for (i = 0; i < n; i++) {
		cin >> a[i];
	}
	
	for (i = 0; i < n; i++) {
		cin >> b[i];
	}
	
	st = 0, dr = LLONG_MAX;
	while (st <= dr) {
		mij = (st + dr) / 2;
		if (check(mij, n, m)) {
			st = mij + 1;
		} else {
			dr = mij - 1;
		}
	}
	
	cout << (st == 0 ? 0 : st - 1);
    return 0;
}
#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...