Submission #1207024

#TimeUsernameProblemLanguageResultExecution timeMemory
1207024peraHorses (IOI15_horses)C++20
34 / 100
1596 ms35492 KiB
#include<bits/stdc++.h> #include "horses.h" #define LL long long using namespace std; const int N_MAX = 5E5 + 1; const LL mod = 1E9 + 7; const __int128 oo = 1E9; int n; set<int> S; vector<LL> x(N_MAX) , y(N_MAX); int calc(){ if(S.empty()){ LL mx = 0; for(int i = 0;i < n;i ++){ mx = max(mx , y[i]); } return mx; } int j = 0; __int128 prd = 1; auto it = --S.end(); while(true){ j = *it; if(__int128(x[*it]) * prd > oo){ break; } if(it == S.begin()){ j = 0; break; } prd *= __int128(x[*it]); --it; } prd = 1; __int128 best = 0; for(int i = j;i < n;i ++){ prd *= __int128(x[i]); __int128 A = __int128(prd) * __int128(y[i]); best = max(best , A); } best %= mod; for(int i = 0;i < j;i ++){ best = x[i] * best % mod; } best %= mod; return (int)best; } int init(int N, int X[], int Y[]) { n = N; for(int i = 0;i < N;i ++){ x[i] = X[i]; y[i] = Y[i]; if(x[i] > 1){ S.insert(i); } } return calc(); } int updateX(int pos, int val) { if(x[pos] > 1){ S.erase(pos); } x[pos] = val; if(x[pos] > 1){ S.insert(pos); } return calc(); } int updateY(int pos, int val) { y[pos] = val; return calc(); }
#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...