Submission #1178443

#TimeUsernameProblemLanguageResultExecution timeMemory
1178443sleepntsheepHorses (IOI15_horses)C11
0 / 100
53 ms19016 KiB
#include "horses.h" #include <stdio.h> int n, t[1111111], r1[1111111], y[555555], r2[1111111]; int mul1(int i,int j){ return(i*1ll*j<1000000000)?i*j:1000000000; } int mul2(int i,int j){ return i*1ll*j%1000000007; } void pulr(int i){ r1[i]=mul1(r1[i*2],r1[i*2+1]); r2[i]=mul2(r2[i*2],r2[i*2+1]);} int queryr(int l,int r){ int z=1; for(l+=n,r+=n;l<r;l/=2,r/=2){ if(l&1)z=mul1(z,r1[l++]); if(r&1)z=mul1(r1[--r],z); } return z; } int queryr2(int l,int r){ int z=1; for(l+=n,r+=n;l<r;l/=2,r/=2){ if(l&1)z=mul2(z,r2[l++]); if(r&1)z=mul2(r2[--r],z); } return z; } void pult(int i){ int a=t[i*2],b=t[i*2+1]; t[i]=(queryr(a+1,b+1)*1ll*y[b]>=y[a])?b:a; } int init(int N, int X[], int Y[]) { n=N; for(int i=0;i<n;++i) t[i+n]=i, r1[i+n]=r2[i+n]=X[i], y[i]=Y[i]; for(int i=n;--i;)pulr(i); for(int i=n;--i;)pult(i); return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007; } int updateX(int pos, int val) { r1[pos+n]=r2[pos+n]=val; for(int j=pos+n;j/=2;)pulr(j); return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007; } int updateY(int pos, int val) { y[pos]=val; for(int j=pos+n;j/=2;)pult(j); return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007; }
#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...