길이 앤의 수열 에이가 주어짐. 에이의 원소들을 각각 에이, 에이, 에이앤 이라고 할 때 아이<제이 인덱 에이아이가 에이 제이라면 인버젼이라고 함
주어진 순열에서 인버젼의 수를 구하는 프로그램
#include <stdio.h>
#define MAX_N 100001
int N, input[MAX_N], tree[MAX_N];
long long Ans;
// Index Tree - 변하는 배열의 구간 합을 O(logN)에 계산
// 인덱스 트리. 트리가 어떻게 변화하는지 확인 할 것
void Add(int idx, int val)
{
while (idx <= N)
{
tree[idx] += val;
idx += (idx & -idx);
}
}
long long Sum(int idx)
{
long long s = 0;
while (idx > 0)
{
s += tree[idx];
idx -= (idx & -idx);
}
return s;
}
int main(void)
{
freopen("test.txt", "r", stdin);
int T, tc, i, idx;
long long tmp;
setbuf(stdout, NULL);
scanf("%d\n", &T);
for (tc = 1; tc <= T; tc++)
{
scanf("%d\n", &N); // 길이를 받음
for (i = 1; i <= N; i++)
{
scanf("%d", &input[i]); // 수열을 받음
tree[i] = 0;
}
scanf("\n");
Ans = 0;
Add(input[1], 1);
for (i = 2; i <= N; i++)
{
idx = input[i];
tmp = (i - 1) - Sum(idx);
Ans += tmp;
Add(idx, 1);
//printf("%d(%lld) ", idx, tmp);
}
printf("#%d %lld\n", tc, Ans);
}
return 0;
}
- 왜 이렇게 풀이
- 트리와 링크드 리스크 만들었을 때 장점
- 그리고 비트 연산 했을 때 장점
- 오케이 접수
'Algorithms > tree' 카테고리의 다른 글
알고리즘 문제 해결 전략 2 6장 트리 (4) (0) | 2021.07.03 |
---|---|
알고리즘 문제 해결 전략 2 06장 트리 (3) (0) | 2021.07.03 |
알고리즘 문제 해결 전략 2 06장 트리 (2) (0) | 2021.07.03 |
알고리즘 문제 해결 전략 2 06장 트리 (1) (0) | 2021.07.01 |
5-1 비밀 (0) | 2018.11.12 |
댓글