제출 #654974

#제출 시각아이디문제언어결과실행 시간메모리
654974valerikkLightning Rod (NOI18_lightningrod)C++17
100 / 100
475 ms246188 KiB
#include <bits/stdc++.h>

using namespace std;

#include <cstdio>

/** 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;

void flush() {
    if (write_pos) {
        fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
    }
}

const int N = 1e7 + 7;

int n;
int x[N], y[N];
int st[N], top = 0;

bool protect(int i, int j) {
	return abs(x[i] - x[j]) <= y[i] - y[j];
}

int main() {
	n = readInt();
	for (int i = 0; i < n; ++i) {
		x[i] = readInt();
		y[i] = readInt();
	}
	for (int i = 0; i < n; ++i) {
		while (top > 0 && protect(i, st[top - 1])) {
			--top;
		}
		if (top == 0 || !protect(st[top - 1], i)) {
			st[top++] = i;
		}
	}
	writeInt(top, '\n');

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...