제출 #1273801

#제출 시각아이디문제언어결과실행 시간메모리
1273801Petrix말 (IOI15_horses)C++20
0 / 100
31 ms12288 KiB
#include "horses.h" #include<iostream> using namespace std; #pragma GCC optimize("O3,inline") #define MOD 1000000007 int n; long long x[600001]; long long aint[2400001]; long long y[600001]; void init(int nod,int st,int dr){ if(st==dr){ aint[nod]=x[st]; return; } int mij=(st+dr)/2; aint[nod]=aint[2*nod]*aint[2*nod+1]%MOD; } void update(int nod,int st,int dr,int a){ if(st==dr){ aint[nod]=x[st]; return; } int mij=(st+dr)/2; if(a<=mij) update(2*nod,st,mij,a); else update(2*nod+1,mij+1,dr,a); aint[nod]=aint[2*nod]*aint[2*nod+1]%MOD; } long long query(int nod,int st,int dr,int a,int b){ if(b<st || dr<a) return 1; if(a<=st && dr<=b) return aint[nod]; int mij=(st+dr)/2; return query(2*nod,st,mij,a,b)*query(2*nod+1,mij+1,dr,a,b)%MOD; } int calc(){ long long ci,prod,i,rasp=1,max1; ci=n;prod=y[n]*x[n]; for(i=n-1;i>=1;i--){ if(prod>1e9) break; if(y[i]>prod){ ci=i;prod=y[i]; } prod*=x[i]; } rasp=query(1,1,n,1,ci); rasp=(rasp*y[ci])%MOD; return rasp; } int init(int N,int X[],int Y[]){ int i; n=N; for(i=1;i<=n;i++){ x[i]=X[i-1]; y[i]=Y[i-1]; } init(1,1,n); return calc(); } int updateX(int pos,int val){ x[pos+1]=val; update(1,1,n,pos+1); return calc(); } int updateY(int pos,int val){ y[pos+1]=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...