Submission #1192405

#TimeUsernameProblemLanguageResultExecution timeMemory
1192405lance0Horses (IOI15_horses)C++20
54 / 100
1593 ms14392 KiB
#include <bits/stdc++.h>
using namespace std;

long long fast_expo(long long x, long long y, long long mod) {
	long long ans = 1;
	long long mult = x;
	while (y > 0) {
		if (y % 2) {
			ans = (ans*mult) % mod;
		}
		mult = (mult*mult) % mod;
		y = y >> 1;
	}
	return ans;
}

long long inv_mod(long long x, long long mod) {
	return fast_expo(x, mod-2, mod);
}

int n;
vector<long long> x, y;
long long product = 1;
long long mod = 1e9+7;
long long init(int N, int X[], int Y[]) {
	n = N;
	for (int i = 0; i < n; i++) {
		x.push_back(X[i]);
		product = (product * x[i]) % mod;
	}
	for (int i = 0; i < n; i++) {
		y.push_back(Y[i]);
	}
	long long picked_y = y[n-1];
	long long divisor = 1;
	long long curr_y = y[n-1];
	long long curr_div = 1;
	for (int i = n-2; i >= 0; i--) {
		curr_div *= x[i+1];
		curr_y = y[i];
		if (curr_div >= 1e9) {
			break;
		} else if ((curr_y * divisor) > (picked_y * curr_div)) {
			picked_y = curr_y;
			divisor = curr_div;
		}
	}
	long long ans = ((product * picked_y) % mod * inv_mod(divisor, mod)) % mod;
	return ans;
}

long long updateX(int pos, int val) {
	product = ((product * (long long)val % mod) * inv_mod(x[pos], mod))% mod;
	x[pos] = val;
	long long picked_y = y[n-1];
	long long divisor = 1;
	long long curr_y = y[n-1];
	long long curr_div = 1;
	for (int i = n-2; i >= 0; i--) {
		curr_div *= x[i+1];
		curr_y = y[i];
		if (curr_div >= 1e9) {
			break;
		} else if ((curr_y * divisor) > (picked_y * curr_div)) {
			picked_y = curr_y;
			divisor = curr_div;
		}
	}
	long long ans = ((product * picked_y) % mod * inv_mod(divisor, mod)) % mod;
	return ans;
}
long long updateY(int pos, int val) {
	y[pos] = val;
	long long picked_y = y[n-1];
	long long divisor = 1;
	long long curr_y = y[n-1];
	long long curr_div = 1;
	for (int i = n-2; i >= 0; i--) {
		curr_div *= x[i+1];
		curr_y = y[i];
		if (curr_div >= 1e9) {
			break;
		} else if ((curr_y * divisor) > (picked_y * curr_div)) {
			picked_y = curr_y;
			divisor = curr_div;
		}
	}
	long long ans = ((product * picked_y) % mod * inv_mod(divisor, mod)) % mod;
	return ans;
}
#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...