Submission #1837143
Source Code Expand
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cassert>
#define rep(i, a, b) for (int i = (a), _ = (b); i <= _; ++ i)
#define per(i, a, b) for (int i = (a), _ = (b); i >= _; -- i)
#define For(i, a, b) for (int i = (a), _ = (b); i < _; ++ i)
#define ri rd<int>
using namespace std;
const int maxN = 3e5 + 7;
template<class T> inline T rd() {
bool f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = 0;
T x = 0; for (; isdigit(c); c = getchar()) x = x * 10 + c - 48; return f ? x : -x;
}
int W, H, C, n, ans;
struct pt {
int x, y;
inline bool operator < (const pt &v) const { return x < v.x; }
}d[maxN];
inline bool in(const pt &x, const pt &y) {
return y.x <= x.x && x.y <= y.y;
}
inline int calc(const pt &x, const pt &y, const pt &l, const pt &r) {
return y.x - x.x + min(l.y, r.y) - max(l.x, r.x);
}
void solve(int l, int r) {
if (l >= r) return;
static pt a[maxN];
static deque<pt> q;
int mid = (l + r) >> 1;
solve(l, mid);
solve(mid+1, r);
for (int up = H, dw = 0, i = mid; i >= l; -- i) {
a[i] = (pt){dw, up};
if (d[i].y >= C) up = min(up, d[i].y);
if (d[i].y <= C) dw = max(dw, d[i].y);
}
for (int up = H, dw = 0, i = mid+1; i <= r; ++ i) {
a[i] = (pt){dw, up};
if (d[i].y >= C) up = min(up, d[i].y);
if (d[i].y <= C) dw = max(dw, d[i].y);
}
for (int i = l, j = r; i <= mid; ++ i) {
for (; j > mid && !in(a[i], a[j]); -- j);
if (in(a[i], a[j])) ans = max(ans, calc(d[i], d[j], a[i], a[j])); else break;
}
for (int i = r, j = l; i > mid; -- i) {
for (; j <= mid && !in(a[i], a[j]); ++ j);
if (in(a[i], a[j])) ans = max(ans, calc(d[i], d[j], a[i], a[j])); else break;
}
#define eval(v) ((v).x + (v).y)
while (!q.empty()) q.pop_back();
for (int i = mid, j = mid+1; i >= l; -- i) {
for (; j <= r && a[j].x <= a[i].x; ++ j) {
pt nw = (pt){d[j].x, a[j].y};
while (!q.empty() && eval(q.back()) <= eval(nw)) q.pop_back();
q.push_back(nw);
}
while (!q.empty() && q.front().y > a[i].y) q.pop_front();
if (!q.empty()) ans = max(ans, eval(q.front()) - d[i].x - a[i].x);
}
#undef eval
#define eval(v) ((v).y - (v).x)
while (!q.empty()) q.pop_back();
for (int i = mid + 1, j = mid; i <= r; ++ i) {
for (; j >= l && a[j].x <= a[i].x; -- j) {
pt nw = (pt){d[j].x, a[j].y};
while (!q.empty() && eval(q.back()) <= eval(nw)) q.pop_back();
q.push_back(nw);
}
while (!q.empty() && q.front().y > a[i].y) q.pop_front();
if (!q.empty()) ans = max(ans, eval(q.front()) + d[i].x - a[i].x);
}
#undef eval
}
int main() {
W = ri(), H = ri(), n = ri();
rep (i, 1, n) d[i].x = ri(), d[i].y = ri();
ans = max(W, H) + 1;
sort(d+1, d+n+1); C = H / 2;
d[0] = (pt){0, C}, d[n+1] = (pt){W, C};
ans = max(ans, d[1].x + H);
ans = max(ans, W - d[n].x + H);
solve(0, n+1);
rep (i, 1, n) swap(d[i].x, d[i].y); swap(H, W);
sort(d+1, d+n+1); C = H / 2;
d[0] = (pt){0, C}, d[n+1] = (pt){W, C};
ans = max(ans, d[1].x + H);
ans = max(ans, W - d[n].x + H);
solve(0, n+1);
printf("%d\n", ans << 1);
return 0;
}
Submission Info
Submission Time |
|
Task |
F - Snuke's Coloring 2 |
User |
acha |
Language |
C++14 (GCC 5.4.1) |
Score |
0 |
Code Size |
3217 Byte |
Status |
WA |
Exec Time |
298 ms |
Memory |
4864 KB |
Judge Result
Set Name |
sample |
All |
Score / Max Score |
0 / 0 |
0 / 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 |
193 ms |
4864 KB |
dia_02.txt |
AC |
193 ms |
4864 KB |
dia_03.txt |
AC |
194 ms |
4864 KB |
dia_04.txt |
AC |
198 ms |
4864 KB |
dial_01.txt |
AC |
192 ms |
4864 KB |
dial_02.txt |
AC |
194 ms |
4864 KB |
dial_03.txt |
AC |
198 ms |
4864 KB |
dial_04.txt |
AC |
201 ms |
4864 KB |
dial_05.txt |
AC |
201 ms |
4864 KB |
dial_06.txt |
AC |
202 ms |
4864 KB |
dialr_01.txt |
AC |
265 ms |
4864 KB |
dialr_02.txt |
AC |
282 ms |
4864 KB |
dialr_03.txt |
AC |
277 ms |
4864 KB |
dialr_04.txt |
AC |
291 ms |
4864 KB |
diar_01.txt |
AC |
258 ms |
4864 KB |
diar_02.txt |
AC |
259 ms |
4864 KB |
diar_03.txt |
AC |
260 ms |
4864 KB |
hand_01.txt |
AC |
1 ms |
2304 KB |
hand_02.txt |
AC |
2 ms |
2304 KB |
hand_03.txt |
AC |
1 ms |
2304 KB |
hand_04.txt |
AC |
1 ms |
2304 KB |
hand_05.txt |
AC |
1 ms |
2304 KB |
poc_t_1.txt |
AC |
1 ms |
2304 KB |
poc_t_2.txt |
AC |
1 ms |
2304 KB |
poc_t_3.txt |
AC |
1 ms |
2304 KB |
poc_t_4.txt |
AC |
1 ms |
2304 KB |
poc_t_5.txt |
AC |
1 ms |
2304 KB |
poc_w_1.txt |
AC |
1 ms |
2304 KB |
poc_w_2.txt |
AC |
1 ms |
2304 KB |
random0_01.txt |
AC |
287 ms |
4864 KB |
random0_02.txt |
AC |
291 ms |
4864 KB |
random0_03.txt |
AC |
298 ms |
4864 KB |
random1_01.txt |
AC |
282 ms |
4864 KB |
random1_02.txt |
AC |
288 ms |
4864 KB |
random1_03.txt |
AC |
294 ms |
4864 KB |
random1_04.txt |
AC |
287 ms |
4864 KB |
random1_05.txt |
AC |
293 ms |
4864 KB |
random1_06.txt |
WA |
281 ms |
4864 KB |
random1_07.txt |
AC |
281 ms |
4864 KB |
rect_01.txt |
WA |
285 ms |
4864 KB |
rect_02.txt |
AC |
283 ms |
4864 KB |
rect_03.txt |
WA |
287 ms |
4864 KB |
rect_04.txt |
AC |
278 ms |
4864 KB |
rect_05.txt |
AC |
280 ms |
4864 KB |
rect_06.txt |
AC |
267 ms |
4864 KB |
rect_07.txt |
AC |
287 ms |
4864 KB |
rect_08.txt |
WA |
289 ms |
4864 KB |
rect_09.txt |
AC |
291 ms |
4864 KB |
rect_10.txt |
AC |
291 ms |
4864 KB |
sample_01.txt |
AC |
2 ms |
2304 KB |
sample_02.txt |
AC |
1 ms |
2304 KB |
sample_03.txt |
AC |
1 ms |
2304 KB |
sample_04.txt |
AC |
1 ms |
2304 KB |
x_01.txt |
AC |
188 ms |
4864 KB |
x_02.txt |
AC |
188 ms |
4864 KB |
x_03.txt |
AC |
189 ms |
4864 KB |
x_04.txt |
AC |
194 ms |
4864 KB |