Submission #1691589


Source Code Expand

#include <bits/stdc++.h>
#define ls  (n<<1)
#define rs  (ls|1)
using namespace std;

const int N=300010;
struct point{int x,y;}a[N];
int w,h,n,ans,st1[N],st2[N],top1,top2,t[4*N],tag[4*N];

bool cmp(point x,point y){return x.x<y.x;}

void build(int n,int l,int r)
{
	if (l==r)  t[n]=-a[l-1].x;
	else
		{
			int mid=(l+r)>>1;
			build(ls,l,mid),build(rs,mid+1,r);
			t[n]=max(t[ls],t[rs]);
		}
}

void modify(int n,int l,int r,int L,int R,int k)
{
	if ((L<=l)&&(r<=R))  t[n]+=k,tag[n]+=k;
	else
		{
			int mid=(l+r)>>1;
			if (L<=mid)  modify(ls,l,mid,L,R,k);
			if (mid<R)  modify(rs,mid+1,r,L,R,k);
			t[n]=max(t[ls],t[rs])+tag[n];
		}
}

void solve()
{
	memset(t,0,sizeof(t)),memset(tag,0,sizeof(tag)),top1=top2=0;
	sort(a+1,a+n+1,cmp);
	if (a[n].x!=w)  a[++n]=(point){w,-1};
	build(1,1,n);
	for (int i=1; i<=n; i++)
		if (a[i].y>h/2)
			{
				modify(1,1,n,i,i,h);
				ans=max(ans,2*(a[i].x+t[1]));
				modify(1,1,n,st1[top1]+1,i,a[i].y-h);
				while ((top1)&&(a[st1[top1]].y>a[i].y))
					modify(1,1,n,st1[top1-1]+1,st1[top1],a[i].y-a[st1[top1]].y),top1--;
				st1[++top1]=i;
			}else
			{
				modify(1,1,n,i,i,h);
				ans=max(ans,2*(a[i].x+t[1]));
				modify(1,1,n,st2[top2]+1,i,-a[i].y);
				while ((top2)&&(a[st2[top2]].y<a[i].y))
					modify(1,1,n,st2[top2-1]+1,st2[top2],a[st2[top2]].y-a[i].y),top2--;
				st2[++top2]=i;
			}
	n-=(a[n].y<0);
}

void work()
{
	scanf("%d %d %d",&w,&h,&n);
	for (int i=1; i<=n; i++)  scanf("%d %d",&a[i].x,&a[i].y);
	solve();
	for (int i=1; i<=n; i++)  swap(a[i].x,a[i].y);
	swap(w,h);
	solve();
	printf("%d",ans);
}

int main()
{
	work();
	return 0;
}

Submission Info

Submission Time
Task F - Snuke's Coloring 2
User YMDragon
Language C++14 (GCC 5.4.1)
Score 1600
Code Size 1668 Byte
Status AC
Exec Time 430 ms
Memory 14336 KB

Compile Error

./Main.cpp: In function ‘void work()’:
./Main.cpp:64:28: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d",&w,&h,&n);
                            ^
./Main.cpp:65:58: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  for (int i=1; i<=n; i++)  scanf("%d %d",&a[i].x,&a[i].y);
                                                          ^

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 416 ms 14336 KB
dia_02.txt AC 416 ms 14336 KB
dia_03.txt AC 415 ms 14336 KB
dia_04.txt AC 420 ms 14336 KB
dial_01.txt AC 414 ms 14336 KB
dial_02.txt AC 418 ms 14336 KB
dial_03.txt AC 419 ms 14336 KB
dial_04.txt AC 421 ms 14336 KB
dial_05.txt AC 421 ms 14336 KB
dial_06.txt AC 421 ms 14336 KB
dialr_01.txt AC 401 ms 14336 KB
dialr_02.txt AC 407 ms 14336 KB
dialr_03.txt AC 406 ms 14336 KB
dialr_04.txt AC 409 ms 14336 KB
diar_01.txt AC 426 ms 14336 KB
diar_02.txt AC 429 ms 14336 KB
diar_03.txt AC 430 ms 14336 KB
hand_01.txt AC 5 ms 12544 KB
hand_02.txt AC 5 ms 12544 KB
hand_03.txt AC 5 ms 12544 KB
hand_04.txt AC 5 ms 12544 KB
hand_05.txt AC 5 ms 12544 KB
poc_t_1.txt AC 5 ms 12544 KB
poc_t_2.txt AC 5 ms 12544 KB
poc_t_3.txt AC 5 ms 12544 KB
poc_t_4.txt AC 5 ms 12544 KB
poc_t_5.txt AC 5 ms 12544 KB
poc_w_1.txt AC 5 ms 12544 KB
poc_w_2.txt AC 5 ms 12544 KB
random0_01.txt AC 408 ms 14336 KB
random0_02.txt AC 406 ms 14336 KB
random0_03.txt AC 413 ms 14336 KB
random1_01.txt AC 406 ms 14336 KB
random1_02.txt AC 406 ms 14336 KB
random1_03.txt AC 410 ms 14336 KB
random1_04.txt AC 410 ms 14336 KB
random1_05.txt AC 412 ms 14336 KB
random1_06.txt AC 407 ms 14336 KB
random1_07.txt AC 406 ms 14336 KB
rect_01.txt AC 407 ms 14336 KB
rect_02.txt AC 414 ms 14336 KB
rect_03.txt AC 406 ms 14336 KB
rect_04.txt AC 408 ms 14336 KB
rect_05.txt AC 404 ms 14336 KB
rect_06.txt AC 400 ms 14336 KB
rect_07.txt AC 407 ms 14336 KB
rect_08.txt AC 407 ms 14336 KB
rect_09.txt AC 407 ms 14336 KB
rect_10.txt AC 407 ms 14336 KB
sample_01.txt AC 5 ms 12544 KB
sample_02.txt AC 5 ms 12544 KB
sample_03.txt AC 5 ms 12544 KB
sample_04.txt AC 5 ms 12544 KB
x_01.txt AC 329 ms 14336 KB
x_02.txt AC 330 ms 14336 KB
x_03.txt AC 330 ms 14336 KB
x_04.txt AC 333 ms 14336 KB