제출 #18655

#제출 시각아이디문제언어결과실행 시간메모리
18655suhgyuho_william말 (IOI15_horses)C++98
34 / 100
1500 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)*((-value)/MOD)); 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]; t = N-29; tmp = 1; for(i=N-28; i>=1; 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(N-29 <= pos){ x[pos] = (long long)val; subtask3(); }else{ ans *= inv(x[pos]); sb3 *= inv(x[pos]); ans %= MOD; sb3 %= MOD; x[pos] = (long long)val; ans *= x[pos]; sb3 *= x[pos]; ans %= MOD; sb3 %= MOD; } return (int)ans; } int updateY(int pos, int val) { pos++; if(N <= 1000){ y[pos] = (long long)val; return process1(); } if(N-29 <= pos){ y[pos] = (long long)val; subtask3(); }else{ y[pos] = (long long)val; } 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...