Submission #11918876


Source Code Expand

//Love and Freedom.
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<stack>
#define ll long long
#define inf 20021225
#define N 300010
#define ls x<<1
#define rs x<<1|1
#define mid (l+r>>1)
#define pa pair<int,int>
#define fs first
#define se second
#define mp make_pair
using namespace std;
int read()
{
	int s=0,t=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')	t=-1; ch=getchar();}
	while(ch>='0' && ch<='9')	s=s*10+ch-'0',ch=getchar();
	return s*t;
}
int tag[N<<2],mx[N<<2];
void puttag(int x,int t){tag[x]+=t,mx[x]+=t;}
void pushdown(int x)
{
	if(!tag[x])	return;
	puttag(ls,tag[x]),puttag(rs,tag[x]),tag[x]=0;
}
void pushup(int x){mx[x]=max(mx[ls],mx[rs]);}
void modify(int x,int l,int r,int LL,int RR,int t)
{
	if(l>=LL&&r<=RR)	return void(puttag(x,t)); pushdown(x);
	if(LL<=mid)	modify(ls,l,mid,LL,RR,t);
	if(RR>mid)	modify(rs,mid+1,r,LL,RR,t);
	pushup(x);
}
int query(int x,int l,int r,int LL,int RR)
{
	if(LL<=l&&RR>=r)	return mx[x]; pushdown(x); int ans=0;
	if(LL<=mid)	ans=max(ans,query(ls,l,mid,LL,RR));
	if(RR>mid)	ans=max(ans,query(rs,mid+1,r,LL,RR));
	return ans;
}
struct poi{int x,y;}s[N];
bool operator<(poi a,poi b){return a.x==b.x?a.y<b.y:a.x<b.x;}
int n,w,h,ans; stack<pa> L,R;
void solve()
{
	sort(s+1,s+n+1); while(!L.empty()) L.pop(); while(!R.empty()) R.pop();
	memset(tag,0,sizeof(tag)),memset(mx,0,sizeof(mx));
	for(int i=1;i<=n;i++)
	{
		if(s[i].y<=h/2)
		{
			int nxt=i-1;
			while(!L.empty()&&L.top().se<=s[i].y)
				modify(1,1,n,L.top().fs,nxt,L.top().se-s[i].y),
				nxt=L.top().fs-1,L.pop();
			if(nxt!=i-1)	L.push(mp(nxt+1,s[i].y));
		}
		else
		{
			int nxt=i-1;
			while(!R.empty()&&R.top().se>=s[i].y)
				modify(1,1,n,R.top().fs,nxt,s[i].y-R.top().se),
				nxt=R.top().fs-1,R.pop();
			if(nxt!=i-1)	R.push(mp(nxt+1,s[i].y));
		}
		
		L.push(mp(i,0)); R.push(mp(i,h));
		modify(1,1,n,i,i,h-s[i].x);
		ans=max(ans,s[i+1].x+mx[1]);
	}
}
void init()
{
	w=read(),h=read(),n=read();
	for(int i=1;i<=n;i++)	s[i].x=read(),s[i].y=read();
	s[++n]=poi{0,0}; s[++n]=poi{w,h};
}
void work()
{
	solve();
	for(int i=1;i<=n;i++)	swap(s[i].x,s[i].y); swap(w,h);
	solve(); printf("%d\n",ans*2);
}
int main()
{
	init(); work();
	return 0;
}

Submission Info

Submission Time
Task F - Snuke's Coloring 2
User hanyuwei
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 2295 Byte
Status AC
Exec Time 583 ms
Memory 13260 KiB

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 578 ms 13260 KiB
dia_02.txt AC 578 ms 13260 KiB
dia_03.txt AC 577 ms 13184 KiB
dia_04.txt AC 583 ms 13260 KiB
dial_01.txt AC 551 ms 13184 KiB
dial_02.txt AC 567 ms 13260 KiB
dial_03.txt AC 556 ms 13260 KiB
dial_04.txt AC 571 ms 13184 KiB
dial_05.txt AC 559 ms 13260 KiB
dial_06.txt AC 561 ms 13184 KiB
dialr_01.txt AC 517 ms 11904 KiB
dialr_02.txt AC 522 ms 12032 KiB
dialr_03.txt AC 522 ms 12160 KiB
dialr_04.txt AC 518 ms 11904 KiB
diar_01.txt AC 557 ms 13056 KiB
diar_02.txt AC 560 ms 13056 KiB
diar_03.txt AC 560 ms 13056 KiB
hand_01.txt AC 5 ms 9984 KiB
hand_02.txt AC 5 ms 9984 KiB
hand_03.txt AC 5 ms 9984 KiB
hand_04.txt AC 5 ms 9984 KiB
hand_05.txt AC 5 ms 9984 KiB
poc_t_1.txt AC 5 ms 9984 KiB
poc_t_2.txt AC 5 ms 9984 KiB
poc_t_3.txt AC 6 ms 9984 KiB
poc_t_4.txt AC 5 ms 9984 KiB
poc_t_5.txt AC 5 ms 9984 KiB
poc_w_1.txt AC 5 ms 9984 KiB
poc_w_2.txt AC 5 ms 9984 KiB
random0_01.txt AC 518 ms 11904 KiB
random0_02.txt AC 518 ms 11904 KiB
random0_03.txt AC 527 ms 11904 KiB
random1_01.txt AC 519 ms 11904 KiB
random1_02.txt AC 539 ms 11904 KiB
random1_03.txt AC 523 ms 11904 KiB
random1_04.txt AC 523 ms 11904 KiB
random1_05.txt AC 527 ms 11904 KiB
random1_06.txt AC 519 ms 11904 KiB
random1_07.txt AC 519 ms 11904 KiB
rect_01.txt AC 518 ms 11904 KiB
rect_02.txt AC 518 ms 11904 KiB
rect_03.txt AC 519 ms 11904 KiB
rect_04.txt AC 526 ms 12800 KiB
rect_05.txt AC 517 ms 12416 KiB
rect_06.txt AC 493 ms 13056 KiB
rect_07.txt AC 518 ms 11904 KiB
rect_08.txt AC 519 ms 11904 KiB
rect_09.txt AC 520 ms 11904 KiB
rect_10.txt AC 519 ms 11904 KiB
sample_01.txt AC 5 ms 9984 KiB
sample_02.txt AC 5 ms 9984 KiB
sample_03.txt AC 5 ms 9984 KiB
sample_04.txt AC 5 ms 9984 KiB
x_01.txt AC 450 ms 13260 KiB
x_02.txt AC 448 ms 13260 KiB
x_03.txt AC 449 ms 13260 KiB
x_04.txt AC 454 ms 13260 KiB