Submission #1245599

#TimeUsernameProblemLanguageResultExecution timeMemory
1245599santi3223Horses (IOI15_horses)C++20
34 / 100
1595 ms8256 KiB
#include <bits/stdc++.h>
#include "horses.h"
using namespace std;
#define ll long long
#define vb vector<bool>
#define pb push_back
#define ff(aa, bb, cc) for(int aa = bb; aa < cc; aa++)
#define vl vector<ll>
#define pll pair<ll, ll>
#define fi first
#define se second
#define ed "\n"
#define all(aaa) aaa.begin(), aaa.end()
#define rall(aaa) aaa.rbegin(), aaa.rend()
ll MOD = 1e9+7;

vector<int> X, Y;
int n;

int init(int N, int x[], int y[]){
	n = N;
	X = vector<int>(n);
	Y = vector<int>(n);
	ff(i, 0, n){
		X[i] = x[i];
		Y[i] = y[i];
	}
	ll prev = 1;
	ff(i, 0, n){
		//cout << prev << " " << maxx << ed;
		prev *= X[i];
		prev %= MOD;
		ll x = 1;
		bool better = false;
		ff(j, i+1, n){
			x *= X[j];
			if(x > Y[i] || x*Y[j] > Y[i]){
				better = true;
				break;
			}
		}
		if(!better){
			return (prev*Y[i]) % MOD;
		}
	}
	return (prev*Y[n-1])%MOD;
}

int updateX(int pos, int val) {	
	X[pos] = val;
	ll prev = 1;
	//cout << X.size() << " " << Y.size() << ed;
	ff(i, 0, n){
		//cout << prev << " " << maxx << ed;
		prev *= X[i];
		prev %= MOD;
		ll x = 1;
		bool better = false;
		ff(j, i+1, n){
			x *= X[j];
			if(x > Y[i] || x*Y[j] > Y[i]){
				better = true;
				break;
			}
		}
		if(!better){
			return (prev*Y[i]) % MOD;
		}
	}
	return (prev*Y[n-1])%MOD;
}

int updateY(int pos, int val){
	Y[pos] = val;
	ll prev = 1;
	ff(i, 0, n){
		//cout << prev << " " << maxx << ed;
		prev *= X[i];
		prev %= MOD;
		ll x = 1;
		bool better = false;
		ff(j, i+1, n){
			x *= X[j];
			if(x > Y[i] || x*Y[j] > Y[i]){
				better = true;
				break;
			}
		}
		if(!better){
			return (prev*Y[i]) % MOD;
		}
	}
	return (prev*Y[n-1])%MOD;
}

/*
int main() {
	int N;
	cin >> N;
	int XX[N], YY[N];
	ff(i, 0, N){
		cin >> XX[i];
	}
	ff(i, 0, N){
		cin >> YY[i];
	}
	//cout << "IN " << N << ed;
	cout << init(N, XX, YY) << ed;
	int M;
	cin >> M;
	ff(i, 0, M){
		int a, b, c;
		cin >> a >> b >> c;
		if(a == 1){
			cout << updateX(b, c) << ed;
		}
		else if(a == 2){
			cout << updateY(b, c) << ed;
		}
	}

	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...