Submission #58488

#TimeUsernameProblemLanguageResultExecution timeMemory
58488E869120Horses (IOI15_horses)C++14
54 / 100
1583 ms133556 KiB
#include "horses.h"
#include <iostream>
using namespace std;

long long N, X[500009], Y[500009], Allval = 0, mod = 1000000007;

long long modpow(long long a, long long b, long long m) {
	long long p = 1, q = a;
	for (int i = 0; i < 31; i++) {
		if ((b&(1LL << i)) != 0) { p *= q; p %= m; }
		q *= q; q %= m;
	}
	return p;
}

long long Div(long long a, long long b, long long m) {
	return (1LL * a*modpow(b, m - 2, m)) % m;
}

int solve() {
	pair<int, int>maxid = make_pair(0, 1);

	long long P = 1;
	for (int i = N - 1; i >= 0; i--) {
		// Y[i] / P と比べる
		if (maxid.first*P < maxid.second * Y[i]) maxid = make_pair(Y[i], P);
		P *= X[i]; if (P >= (1LL << 30)) break;
	}
	long long J = Div(Allval, maxid.second, mod);
	J *= maxid.first; J %= mod;
	return J;
}

int init(int NN, int XX[], int YY[]) {
	N = NN; Allval = 1;
	for (int i = 0; i < N; i++) { X[i] = XX[i]; Allval *= X[i]; Allval %= mod; }
	for (int i = 0; i < N; i++) Y[i] = YY[i];
	return solve();
}

int updateX(int pos, int val) {	
	Allval = Div(Allval, X[pos], mod);
	X[pos] = val;
	Allval *= X[pos]; Allval %= mod;
	return solve();
}

int updateY(int pos, int val) {
	Y[pos] = val;
	return solve();
}

Compilation message (stderr)

horses.cpp: In function 'int solve()':
horses.cpp:24:17: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  for (int i = N - 1; i >= 0; i--) {
               ~~^~~
horses.cpp:31:9: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return J;
         ^
#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...