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 |
|
|
| 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 |