반응형
또 TLE가 났는데, 이번엔 해결을 못하겠어서 결국 C++로 제출했다ㅠㅠ 추측하고 있는 이유는 1. 튜플 정렬 때문 2. 지금까진 대부분 N=100,000이었는데 이번엔 200,000이라..? 채점 현황 가서 Swift로 맞은 사람이 있는지 봤는데 제출한 사람조차 없었다. 그래서 빠르게 포기하고 C++로ㅠㅠ 아래는 TLE 받은 Swift 코드
import Foundation
class FenwickTree {
var tree = Array(repeating: 0, count: 2001)
func sum(to: Int) -> Int {
var ret = 0
var pos = to
while (pos > 0) {
ret += tree[pos]
pos &= (pos - 1)
}
return ret
}
func add(at: Int, val: Int) {
var pos = at
while(pos < tree.count) {
tree[pos] += val
pos += (pos & -pos)
}
}
}
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let N = input[0]
let M = input[1]
var edges = Array(repeating: (0, 0), count: M)
for i in 0..<M {
let edge = readLine()!.split(separator: " ").map{ Int(String($0))! }
let start = edge[0]
let end = edge[1]
edges[i] = (start, end)
}
edges.sort(by: {
// 자기 자신에서 나온 것이 카운트에 영향을 미치지 않게 하려면 튜플의 뒷 값까지 오름차순으로 정렬해야 함.
if $0.0 < $1.0 { return true }
else if $0.0 == $1.0 { return $0.1 < $1.1 }
else { return false }
})
var result: Int64 = 0
var fwt = FenwickTree()
for edge in edges {
let end = edge.1
// 윗 줄에서는 start보다 왼쪽에 있고, 아랫줄에서는 end보다 오른쪽에 있는 애들과 교차한다.
if end != N { result += Int64(fwt.sum(to: N - end)) }
fwt.add(at: N + 1 - end, val: 1)
}
print(result)
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 3770번 대한민국 - C++(cpp) 풀이 + 그림 설명 (0) | 2022.01.12 |
---|---|
백준 1572번 중앙값 - 스위프트(Swift) 시간초과 해결 (0) | 2022.01.12 |
백준 1777번 순열복원 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.12 |
백준 18436번 수열과 쿼리 37 - 스위프트(Swift) 풀이 (0) | 2022.01.12 |
백준 2517번 달리기 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.12 |
댓글