Submission #1230836


Source Code Expand

/*
СТРОИМ СТЕНУ РАБОТЯГИ!
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
█═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═█
█═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═█
█═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═█
█═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═█
█═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═█
█═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═█
█═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═█
█═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═╩═╦═█
█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
*/
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cmath>
#include <bitset>
#include <cassert>
#include <queue>
#include <stack>
#include <deque>
 
  
  
using namespace std;
  
  
template<typename T1, typename T2>inline void chkmin(T1 &x, T2 y) { if (x > y) x = y; }
template<typename T1, typename T2>inline void chkmax(T1 &x, T2 y) { if (x < y) x = y; }
/** Interface */
  
inline int readChar();
template <class T = int> inline T readInt(); 
template <class T> inline void writeInt( T x, char end = 0 );
inline void writeChar( int x ); 
inline void writeWord( const char *s );
  
/** Read */
  
static const int buf_size = 4096;
  
inline int getChar() {
    static char buf[buf_size];
    static int len = 0, pos = 0;
    if (pos == len) {
        pos = 0, len = fread(buf, 1, buf_size, stdin);
    }
    if (pos == len) {
        return -1;
    }
    return buf[pos++];
}
  
inline int readChar() {
    int c = getChar();
    while (c <= 32) {
        c = getChar();
    }
    return c;
}
  
template <class T>
inline T readInt() {
    int s = 1, c = readChar();
    T x = 0;
    if (c == '-')
        s = -1, c = getChar();
    while ('0' <= c && c <= '9')
        x = x * 10 + c - '0', c = getChar();
    return s == 1 ? x : -x;
}
  
/** Write */
  
static int write_pos = 0;
static char write_buf[buf_size];
  
inline void writeChar( int x ) {
    if (write_pos == buf_size)
        fwrite(write_buf, 1, buf_size, stdout), write_pos = 0;
    write_buf[write_pos++] = x;
}
  
template <class T> 
inline void writeInt( T x, char end ) {
    if (x < 0)
        writeChar('-'), x = -x;
  
    char s[24];
    int n = 0;
    while (x || !n)
        s[n++] = '0' + x % 10, x /= 10;
    while (n--)
        writeChar(s[n]);
    if (end)
        writeChar(end);
}
  
inline void writeWord( const char *s ) {     while (*s)
writeChar(*s++); }
  
struct Flusher {
    ~Flusher() {
        if (write_pos)
            fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
    }
} flusher;
  
using namespace std;


#define sz(c) (int)(c).size()
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define left left228
#define right right228
#define rank rank228
const int MAXN = 300010;


int W, H, n, m;
int treeMax[MAXN << 2], treeMod[MAXN << 2];
int st1[MAXN], st2[MAXN], top1, top2;
int a[MAXN];
int ans;
int L, R;

 
struct like {
    int x, y;
    bool operator < (const like &b) const {
        return x < b.x || (x == b.x && y < b.y);
    }
} s[MAXN], A[MAXN];
 

inline void update(const int &v, const int &ls, const int &rs) {
    treeMax[v] = max(treeMax[ls], treeMax[rs]);
}
 

void build(int v, int l, int r) {
    treeMod[v] = 0;
    if (l == r) {
        treeMax[v] = -a[l];
        return;
    }
    int ls = v << 1, rs = ls | 1;
    int mid = (l + r) >> 1;
    build(ls, l, mid); 
    build(rs, mid + 1, r);
    update(v, ls, rs);
}
 

inline void pushdown(const int &v, const int &ls, const int &rs) {
    treeMax[ls] += treeMod[v], treeMod[ls] += treeMod[v];
    treeMax[rs] += treeMod[v], treeMod[rs] += treeMod[v];
    treeMod[v] = 0;
}
 

void modify(int v, int l, int r, int x) {
    if (L <= l && r <= R) {
        treeMod[v] += x, treeMax[v] += x;
        return;
    }
    int ls = v << 1, rs = ls | 1, mid = (l + r) >> 1;
    if (treeMod[v]) {
        pushdown(v, ls, rs);
    }
    if (L <= mid) {
        modify(ls, l, mid, x);
    }
    if (R > mid) {
        modify(rs, mid + 1, r, x);
    }
    update(v, ls, rs);
}

 
inline void solve() {
    int mid = H >> 1;
    for (int i = 1; i <= n; i++) {
        A[i] = s[i];
    }
    sort(A + 1, A + n + 1);
    if (A[n].x < W) {
        A[++n] = (like){W, 0};
    }
    for (int i = 1; i <= n; i++) {
        a[i + 1] = A[i].x;
    }
    a[m = n + 2] = W;
    sort(a + 1, a + m + 1);
    m = unique(a + 1, a + m + 1) - a - 1;
    for (int i = 1; i <= n; i++) {
        A[i].x = lower_bound(a + 1, a + m + 1, A[i].x) - a;
    }
    build(1, 1, m);
    top1 = top2 = 0;
    if (A[1].x > 1) {
        L = 1, R = 1;
        modify(1, 1, m, H);
    }
    A[0].x = 1;
    for (int i = 1; i <= n; i++) {
        L = A[i].x, R = A[i].x;
        modify(1, 1, m, H);
        ans = max(ans, (treeMax[1] + a[A[i].x]) << 1);
        if (A[i].y <= mid) {
            if ((L = A[st1[top1]].x) <= (R = A[i].x - 1)) {
                modify(1, 1, m, -A[i].y);
            }
            while (top1 && A[i].y >= A[st1[top1]].y) {
                if ((L = A[st1[top1 - 1]].x) <= (R = A[st1[top1]].x - 1)) {
                    modify(1, 1, m, A[st1[top1]].y - A[i].y);
                }
                top1--;
            }
            st1[++top1] = i;
        } else {
            if ((L = A[st2[top2]].x) <= (R = A[i].x - 1)) {
                modify(1, 1, m, A[i].y - H);
            }
            while (top2 && A[i].y <= A[st2[top2]].y) {
                if ((L = A[st2[top2 - 1]].x) <= (R = A[st2[top2]].x - 1)) {
                    modify(1, 1, m, A[i].y - A[st2[top2]].y);
                }
                top2--;
            }
            st2[++top2] = i;
        }
    }
}
 


int main() {
    W = readInt(), H = readInt(), n = readInt();
    for (int i = 1; i <= n; i++) {
        s[i].x = readInt(), s[i].y = readInt();
    }
    solve();
    for (int i = 1; i <= n; i++) {
        swap(s[i].x, s[i].y);
    }
    swap(W, H);
    solve();
    writeInt(ans, '\n');
    return 0;
}

Submission Info

Submission Time
Task F - Snuke's Coloring 2
User EgorLifar
Language C++14 (GCC 5.4.1)
Score 0
Code Size 6796 Byte
Status WA
Exec Time 503 ms
Memory 17280 KB

Judge Result

Set Name sample All
Score / Max Score 0 / 0 0 / 1600
Status
AC × 4
AC × 45
WA × 12
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 WA 443 ms 17280 KB
dia_02.txt WA 443 ms 17280 KB
dia_03.txt WA 443 ms 17280 KB
dia_04.txt WA 444 ms 17280 KB
dial_01.txt AC 441 ms 17280 KB
dial_02.txt AC 442 ms 17280 KB
dial_03.txt AC 443 ms 17280 KB
dial_04.txt AC 443 ms 17280 KB
dial_05.txt AC 443 ms 17280 KB
dial_06.txt AC 443 ms 17280 KB
dialr_01.txt AC 407 ms 17280 KB
dialr_02.txt AC 409 ms 17280 KB
dialr_03.txt AC 408 ms 17280 KB
dialr_04.txt AC 406 ms 17280 KB
diar_01.txt AC 441 ms 17280 KB
diar_02.txt AC 442 ms 17280 KB
diar_03.txt AC 442 ms 17280 KB
hand_01.txt AC 3 ms 10496 KB
hand_02.txt WA 3 ms 10496 KB
hand_03.txt AC 3 ms 10496 KB
hand_04.txt AC 3 ms 10496 KB
hand_05.txt AC 3 ms 10496 KB
poc_t_1.txt AC 3 ms 10496 KB
poc_t_2.txt AC 3 ms 10496 KB
poc_t_3.txt AC 3 ms 10496 KB
poc_t_4.txt WA 3 ms 10496 KB
poc_t_5.txt AC 3 ms 10496 KB
poc_w_1.txt AC 3 ms 10496 KB
poc_w_2.txt AC 3 ms 10496 KB
random0_01.txt AC 406 ms 17280 KB
random0_02.txt AC 407 ms 17280 KB
random0_03.txt AC 408 ms 17280 KB
random1_01.txt AC 407 ms 17280 KB
random1_02.txt WA 405 ms 17280 KB
random1_03.txt AC 407 ms 17280 KB
random1_04.txt AC 409 ms 17280 KB
random1_05.txt AC 406 ms 17280 KB
random1_06.txt WA 407 ms 17280 KB
random1_07.txt AC 404 ms 17280 KB
rect_01.txt AC 404 ms 17280 KB
rect_02.txt AC 410 ms 17280 KB
rect_03.txt WA 503 ms 17280 KB
rect_04.txt AC 401 ms 17280 KB
rect_05.txt AC 402 ms 17280 KB
rect_06.txt AC 399 ms 17280 KB
rect_07.txt WA 405 ms 17280 KB
rect_08.txt AC 411 ms 17280 KB
rect_09.txt WA 405 ms 17280 KB
rect_10.txt WA 405 ms 17280 KB
sample_01.txt AC 3 ms 10496 KB
sample_02.txt AC 3 ms 10496 KB
sample_03.txt AC 3 ms 10496 KB
sample_04.txt AC 3 ms 10496 KB
x_01.txt AC 343 ms 17280 KB
x_02.txt AC 343 ms 17280 KB
x_03.txt AC 343 ms 17280 KB
x_04.txt AC 345 ms 17280 KB