티스토리 뷰
문제
https://www.acmicpc.net/problem/5849
알고리즘
stack
풀이
inversion을 만들지 않는 소의 개수를 구하는 문제입니다.
$a_i$를 u, $b_i$를 v라고 하겠습니다. inversion을 만들지 않기 위해서는 u를 기준으로 정렬했을 때, v가 오름차순의 형태를 가져야만합니다. 오름차순을 유지하기 위해 스택을 사용해서 문제를 풀면 됩니다. 스택의 top이 현재 보고 있는 소의 v보다 크다면 이는 inversion을 만들기 때문에 계속 pop을 해주고, 지금까지 확인한 v값들보다 현재 v값이 작다면 현재 v는 inversion을 만들지 않으므로 스택에 push 해주면 됩니다. 아래 코드는 이 해설과는 다른 코드입니다. 풀이만 참고하세요.
코드
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 1; i <= n; ++i)
using namespace std;
typedef pair<int, int> pii;
int N, ans, piv;
vector<pii> xy;
vector<int> X, Y;
int main() {
#ifndef ONLINE_JUDGE
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
cin >> N;
rep(i, N) {
int u, v;
cin >> u >> v;
xy.emplace_back(u, v);
X.emplace_back(u);
Y.emplace_back(v);
}
sort(X.begin(), X.end());
sort(Y.begin(), Y.end());
sort(xy.begin(), xy.end(), [](pii a, pii b) { return min(a.first, a.second) < min(b.first, b.second); });
rep(i, N) {
auto [u, v] = xy[i];
// cout << u << ' ' << v << '\n';
// cout << piv << '\n';
int U = lower_bound(X.begin(), X.end(), u) - X.begin();
int V = lower_bound(Y.begin(), Y.end(), v) - Y.begin();
if (U == V && piv <= U) {
++ans;
} else {
piv = max(piv, max(U, V));
}
}
cout << ans;
return 0;
}
'Algorithm' 카테고리의 다른 글
[백준 5900] Cow IDs (0) | 2021.08.03 |
---|---|
[백준 5854] Painting the Fence (0) | 2021.07.29 |
[백준 5832] Photo (0) | 2021.07.21 |
[백준 5872] Clumsy Cows (0) | 2021.07.14 |
[백준 1887] Cow Pizza (0) | 2021.07.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dijkstra
- string
- spring boot
- sorting
- Oracle
- 정렬
- 이분매칭
- bfs
- SCC
- implementation
- knapsack
- Segment tree
- dfs
- 2-SAT
- 세그먼트트리
- 이분탐색
- Suffix Array
- greedy
- 동적계획법
- 좌표압축
- 펜윅트리
- DP
- union find
- sweeping
- 트라이
- Fenwick
- 스위핑
- hld
- kmp
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함