Submission #18657

#TimeUsernameProblemLanguageResultExecution timeMemory
18657suhgyuho_william말 (IOI15_horses)C++98
54 / 100
127 ms12812 KiB
#include "horses.h" int N; long long ans,sb3; long long x[500002],y[500002]; #define MOD 1000000007 long long inv(long long value){ if(value == 1) return 1; long long tmp = (inv(MOD%value)*((-MOD)/value)); tmp %= MOD; if(tmp < 0) tmp += MOD; return tmp; } int process1(){ int i,t; long long tmp; ans = x[1]; t = tmp = 1; for(i=2; i<=N; i++){ tmp *= x[i]; if(tmp > y[t] || tmp*y[i] > y[t]){ t = i; ans *= (tmp%MOD); ans %= MOD; tmp = 1; } } sb3 = 1; for(i=1; i<=N-30; i++){ sb3 *= x[i]; sb3 %= MOD; } ans *= y[t]; ans %= MOD; return (int)ans; } void subtask3(){ int i,t; long long tmp; ans = x[N-29]*sb3; ans %= MOD; t = N-29; tmp = 1; for(i=N-28; i<=N; i++){ tmp *= x[i]; if(tmp > y[t] || tmp*y[i] > y[t]){ t = i; ans *= (tmp%MOD); ans %= MOD; tmp = 1; } } ans *= y[t]; ans %= MOD; } int init(int n, int X[], int Y[]) { int i; for(i=1; i<=n; i++){ x[i] = (long long)X[i-1]; y[i] = (long long)Y[i-1]; } N = n; process1(); } int updateX(int pos, int val) { pos++; if(N <= 1000){ x[pos] = (long long)val; return process1(); } if(pos < N-29){ sb3 *= inv(x[pos]); sb3 %= MOD; sb3 *= (long long)val; sb3 %= MOD; } x[pos] = (long long)val; subtask3(); return (int)ans; } int updateY(int pos, int val) { pos++; if(N <= 1000){ y[pos] = (long long)val; return process1(); } y[pos] = (long long)val; subtask3(); return (int)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...