Submission #1691848


Source Code Expand

#include<bits/stdc++.h>
const int N=3e5+7,inf=0x3f3f3f3f;
char ib[N*50],*ip=ib;
int _(){
	int x=0;
	while(*ip<48)++ip;
	while(*ip>47)x=x*10+*ip++-48;
	return x;
}
void maxs(int&a,int b){if(a<b)a=b;}
struct pos{
	int x,y;
	bool operator<(const pos&w)const{return x<w.x;}
}ps[N];
int ss1[N],ss2[N],sp1=0,sp2=0;
int xm,ym,m,n,ans=0,b1[N],b2[N],t1[1<<20|111],t2[1<<20|111],mx;
void ins(int*f,int x,int y){
	for(++x;x<N;x+=x&-x)maxs(f[x],y);
}
int gmx(int*f,int x){
	int v=-inf;
	for(++x;x;x-=x&-x)maxs(v,f[x]);
	return v;
}
void insx(int*f,int x,int y){
	for(x+=mx+1;x;x>>=1)maxs(f[x],y);
}
int gmx(int*f,int l,int r){
	int v=-inf;
	for(l+=mx,r+=mx+2;r-l>1;l>>=1,r>>=1){
		if(~l&1)maxs(v,f[l+1]);
		if(r&1)maxs(v,f[r-1]);
	}
	return v;
}
struct itv{
	int l,r,v;
	bool operator<(const itv&w)const{return r>w.r;}
	void cal(){
		int L=ps[l].x,R=ps[r].x;
		if(v<=m){
			maxs(ans,gmx(b1,l)-v+R-L);
			maxs(ans,gmx(t1,l,r)-v+R);
			ins(b2,l,-v);
			insx(t2,l,-v-L);
		}else{
			maxs(ans,gmx(b2,l)+v+R-L);
			maxs(ans,gmx(t2,l,r)+v+R);
			ins(b1,l,v);
			insx(t1,l,v-L);
		}
	}
}is[N];
#define clr(a) memset(a,-0x3f,sizeof(a))
#define push(ss,sp,op,y,lr,i) do{for(;sp&&ps[ss[sp]].y op y;is[ss[sp--]].lr=i);ss[++sp]=i;}while(0)
void cal2(){
	for(int i=1;i<=n;++i){
		int y=is[i].v=ps[i].y;
		push(ss1,sp1,>,y,r,i);
	}
	for(;sp1;is[ss1[sp1--]].r=n+1);
	for(int i=n;i>=1;--i){
		int y=ps[i].y;
		push(ss1,sp1,>=,y,l,i);
	}
	for(;sp1;is[ss1[sp1--]].l=0);
	for(int i=1;i<=n;++i)maxs(ans,ps[is[i].r].x-ps[is[i].l].x+is[i].v);
}
void cal(){
	m=ym/2;
	std::sort(ps+1,ps+n+1);
	ps[0].x=0,ps[n+1].x=xm;
	for(int i=0;i<=n;++i)maxs(ans,ps[i+1].x-ps[i].x+ym);
	for(int i=1;i<=n;++i){
		int y=is[i].v=ps[i].y;
		if(y<=m)push(ss1,sp1,<,y,r,i);
		else push(ss2,sp2,>,y,r,i);
	}
	for(;sp1;is[ss1[sp1--]].r=n+1);
	for(;sp2;is[ss2[sp2--]].r=n+1);
	for(int i=n;i>=1;--i){
		int y=ps[i].y;
		if(y<=m)push(ss1,sp1,<=,y,l,i);
		else push(ss2,sp2,>=,y,l,i);
	}
	for(;sp1;is[ss1[sp1--]].l=0);
	for(;sp2;is[ss2[sp2--]].l=0);
	std::sort(is+1,is+n+1);
	clr(b1),clr(b2),clr(t1),clr(t2);
	for(int i=1;i<=n;++i)is[i].cal();
	cal2();
	for(int i=1;i<=n;++i)ps[i].y=ym-ps[i].y;
	cal2();
}
int main(){
	fread(ib,1,sizeof(ib),stdin);
	xm=_(),ym=_(),n=_();
	for(mx=2;mx<n+5;mx<<=1);
	maxs(ans,xm+1);
	maxs(ans,ym+1);
	for(int i=1;i<=n;++i){
		ps[i].x=_();
		ps[i].y=_();
	}
	cal();
	std::swap(xm,ym);
	for(int i=1;i<=n;++i)std::swap(ps[i].x,ps[i].y);
	cal();
	printf("%d\n",ans*2);
	return 0;
}

Submission Info

Submission Time
Task F - Snuke's Coloring 2
User ccz181078
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 2556 Byte
Status AC
Exec Time 198 ms
Memory 24832 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:96:30: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
  fread(ib,1,sizeof(ib),stdin);
                              ^

Judge Result

Set Name sample All
Score / Max Score 0 / 0 1600 / 1600
Status
AC × 4
AC × 57
Set Name Test Cases
sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All dia_01.txt, dia_02.txt, dia_03.txt, dia_04.txt, dial_01.txt, dial_02.txt, dial_03.txt, dial_04.txt, dial_05.txt, dial_06.txt, dialr_01.txt, dialr_02.txt, dialr_03.txt, dialr_04.txt, diar_01.txt, diar_02.txt, diar_03.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, poc_t_1.txt, poc_t_2.txt, poc_t_3.txt, poc_t_4.txt, poc_t_5.txt, poc_w_1.txt, poc_w_2.txt, random0_01.txt, random0_02.txt, random0_03.txt, random1_01.txt, random1_02.txt, random1_03.txt, random1_04.txt, random1_05.txt, random1_06.txt, random1_07.txt, rect_01.txt, rect_02.txt, rect_03.txt, rect_04.txt, rect_05.txt, rect_06.txt, rect_07.txt, rect_08.txt, rect_09.txt, rect_10.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, x_01.txt, x_02.txt, x_03.txt, x_04.txt
Case Name Status Exec Time Memory
dia_01.txt AC 183 ms 24832 KB
dia_02.txt AC 183 ms 24832 KB
dia_03.txt AC 184 ms 24832 KB
dia_04.txt AC 185 ms 24832 KB
dial_01.txt AC 184 ms 24832 KB
dial_02.txt AC 178 ms 24832 KB
dial_03.txt AC 179 ms 24832 KB
dial_04.txt AC 180 ms 24832 KB
dial_05.txt AC 184 ms 24832 KB
dial_06.txt AC 185 ms 24832 KB
dialr_01.txt AC 167 ms 24832 KB
dialr_02.txt AC 182 ms 24832 KB
dialr_03.txt AC 183 ms 24832 KB
dialr_04.txt AC 186 ms 24832 KB
diar_01.txt AC 198 ms 24832 KB
diar_02.txt AC 194 ms 24832 KB
diar_03.txt AC 194 ms 24832 KB
hand_01.txt AC 6 ms 18688 KB
hand_02.txt AC 6 ms 18688 KB
hand_03.txt AC 6 ms 18688 KB
hand_04.txt AC 6 ms 18688 KB
hand_05.txt AC 6 ms 18688 KB
poc_t_1.txt AC 6 ms 18688 KB
poc_t_2.txt AC 6 ms 18688 KB
poc_t_3.txt AC 6 ms 18688 KB
poc_t_4.txt AC 6 ms 18688 KB
poc_t_5.txt AC 6 ms 18688 KB
poc_w_1.txt AC 6 ms 18688 KB
poc_w_2.txt AC 6 ms 18688 KB
random0_01.txt AC 184 ms 24832 KB
random0_02.txt AC 184 ms 24832 KB
random0_03.txt AC 185 ms 24832 KB
random1_01.txt AC 184 ms 24832 KB
random1_02.txt AC 183 ms 24832 KB
random1_03.txt AC 184 ms 24832 KB
random1_04.txt AC 184 ms 24832 KB
random1_05.txt AC 186 ms 24832 KB
random1_06.txt AC 187 ms 24832 KB
random1_07.txt AC 183 ms 24832 KB
rect_01.txt AC 183 ms 24832 KB
rect_02.txt AC 184 ms 24832 KB
rect_03.txt AC 184 ms 24832 KB
rect_04.txt AC 181 ms 24832 KB
rect_05.txt AC 180 ms 24832 KB
rect_06.txt AC 183 ms 24832 KB
rect_07.txt AC 187 ms 24832 KB
rect_08.txt AC 186 ms 24832 KB
rect_09.txt AC 184 ms 24832 KB
rect_10.txt AC 183 ms 24832 KB
sample_01.txt AC 6 ms 18688 KB
sample_02.txt AC 6 ms 18688 KB
sample_03.txt AC 6 ms 18688 KB
sample_04.txt AC 6 ms 18688 KB
x_01.txt AC 134 ms 24832 KB
x_02.txt AC 134 ms 24832 KB
x_03.txt AC 134 ms 24832 KB
x_04.txt AC 135 ms 24832 KB