Submission #1178445

#TimeUsernameProblemLanguageResultExecution timeMemory
1178445sleepntsheepHorses (IOI15_horses)C11
0 / 100
55 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;
}
int mint(int a,int b){ if(a==-1)return b;if(b==-1)return a;return(queryr(a+1,b+1)*1ll*y[b]>=y[a])?b:a; }
void pult(int i){ t[i]=mint(t[i*2],t[i*2+1]); }
int queryt(int l,int r){
	int z=-1;
	for(l+=n,r+=n;l<r;l/=2,r/=2){
		if(l&1)z=mint(z,t[l++]);
		if(r&1)z=mint(t[--r],z);
	}
	return z;
}

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) {
	int k=queryt(pos,n);
	r1[pos+n]=r2[pos+n]=val;
	for(int j=pos+n;j/=2;)pulr(j);
	for(int j=pos+k;j/=2;)pult(j);
	return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007;
}

int updateY(int pos, int val) {
	int k=queryt(pos,n);
	y[pos]=val;
	for(int j=pos+k;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...