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
2017-10-18 15:29:17+0900
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
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