BOJ1946. 신입사원

https://www.acmicpc.net/problem/1946

  • 걍 쉬운문제, 입력이 많으니 fio 쓰면 좋음.
  • 그리디라고 하기에도 좀 애매한 문제, 그냥 직관대로 풀면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <sys/stat.h>
#include <sys/mman.h>
class fio {
  size_t rsize;
  unsigned char* rbuf;
  int ridx;

  public:
  fio() : ridx(0) {
    struct stat rstat;
    fstat(0, &rstat);
    rsize = rstat.st_size;
    rbuf = (unsigned char*)mmap(0,rsize,PROT_READ,MAP_FILE|MAP_PRIVATE,0,0);
  }

  inline bool isBlank() {
    return
      rbuf[ridx] == '\n' || rbuf[ridx] == '\t' || rbuf[ridx] == '\r' ||
      rbuf[ridx] == '\f' || rbuf[ridx] == '\v' || rbuf[ridx] == ' ';
  }
  inline void consumeBlank() { while (isBlank()) ridx++; }

  inline int readInt(){
    int res = 0, flag = 0;
    consumeBlank();
    if (rbuf[ridx] == '-'){
      flag = 1;
      ridx++;
    }
    while (!isBlank() && ridx < rsize)
      res = 10 * res + rbuf[ridx++] - '0';
    return flag ? -res : res;
  }
};

int main() {
    fio io;
    int TC, N, a, b;
    TC = io.readInt();
    while(TC--) {
        N = io.readInt();
        vector<int> score(N+1);
        for(int i = 0; i < N; i++) {
            a = readInt();
            b = readInt();
            score[a] = b;
        }
        int minScore = 0x7fffffff, ans = 0;
        for(int i = 1; i <= N; i++) {
            if(score[i] < minScore)
                minScore = score[i], ans++;
        }
        printf("%d\n", ans);
    }
}