Submission #432739

#TimeUsernameProblemLanguageResultExecution timeMemory
432739daniel920712말 (IOI15_horses)C++14
54 / 100
1587 ms59988 KiB
#include "horses.h" #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; long long XX[500005]; long long YY[500005]; long long how[500005]={0}; long long MOD=1e9+7; long long N; struct A { long long l,r; long long con; A* nxl,*nxr; void build(long long ll,long long rr) { //printf("%lld %lld\n",ll,rr); l=ll; r=rr; if(ll+1==rr) { con=XX[ll]; return; } //printf("%lld %lld\n",ll,rr); nxl=(A*) malloc(sizeof(A)); nxr=(A*) malloc(sizeof(A)); //printf("%lld %lld\n",ll,rr); nxl->build(ll,(ll+rr)/2); nxr->build((ll+rr)/2,rr); con=nxl->con*nxr->con%MOD; } void cha(long long where,long long tt) { if(l==where&&r==where+1) { con=tt; return; } if(where<(l+r)/2) nxl->cha(where,tt); else nxr->cha(where,tt); con=nxl->con*nxr->con%MOD; } long long Find(long long ll,long long rr) { if(ll==l&&rr==r) return con; if(rr<=(l+r)/2) return nxl->Find(ll,rr); if(ll>=(l+r)/2) return nxr->Find(ll,rr); return nxl->Find(ll,(l+r)/2)*nxr->Find((l+r)/2,rr)%MOD; } }; A* root; int init(int N, int X[], int Y[]) { //printf("bb\n"); long long ans=0,t=1,i,now=0; ::N=N; for(i=0;i<N;i++) { XX[i]=(long long) X[i]; YY[i]=(long long) Y[i]; } root=(A*)malloc(sizeof(A)); root->build(0,N); //printf("aa\n"); for(i=N-1;i>=0;i--) { if(YY[i]>now) { now=YY[i]; t=YY[i]; } ans=t*root->Find(0,i+1)%MOD; if(now<1000000000) now*=XX[i]; else break; t*=XX[i]; t%=MOD; } //printf("bb\n"); return (int) ans; } int updateX(int pos, int val) { long long ans=0,t=1,i,now=0; XX[pos]=(long long) val; root->cha(pos,val); for(i=N-1;i>=0;i--) { if(YY[i]>now) { now=YY[i]; t=YY[i]; } ans=t*root->Find(0,i+1)%MOD; if(now<1000000000) now*=XX[i]; else break; t*=XX[i]; t%=MOD; } return (int) ans; } int updateY(int pos, int val) { long long ans=0,t=1,i,now=0; YY[pos]=(long long) val; for(i=N-1;i>=0;i--) { if(YY[i]>now) { now=YY[i]; t=YY[i]; } ans=t*root->Find(0,i+1)%MOD; if(now<1000000000) now*=XX[i]; else break; t*=XX[i]; t%=MOD; } return (int) ans; }

Compilation message (stderr)

horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:54:14: warning: declaration of 'N' shadows a global declaration [-Wshadow]
   54 | int init(int N, int X[], int Y[])
      |          ~~~~^
horses.cpp:10:11: note: shadowed declaration is here
   10 | long long N;
      |           ^
#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...