반응형
출처: SWEA
Approach
bit 연산을 이용해서 자료를 재배치하는 문제이다.
- 배열 index N은 가장 큰수(마지막수)가 N인 경우의 수이다.
- 전체가 다 들어오고 나서 셈하는 것이 아닌 들어 올때마다 갱신된다.
#include <stdio.h>
#define LL long long
const int MOD = 1000000007;
const int MAX_N = 1e5;
int N, S, TC, srr[MAX_N + 1];
LL card[MAX_N + 1], temp[MAX_N + 1];
void addBit(int idx, LL val)
{
while (idx <= MAX_N)
{
card[idx] += val;
card[idx] %= MOD;
idx += (idx & -idx);
}
}
void init()
{
for (int i = 0; i < MAX_N + 1; i++)
{
card[i] = 0;
}
addBit(1, 1);
}
LL sumBit(int idx)
{
LL sum = 0;
while (idx > 0)
{
sum += card[idx];
sum %= MOD;
idx -= (idx & -idx);
}
return sum;
}
void input()
{
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%d", &S);
for (int j = 0; j < S; j++)
{
scanf("%d", &srr[j]);
temp[j] = sumBit(srr[j]) % MOD;
}
for (int j = 0; j < S; j++)
{
addBit(srr[j], temp[j]);
}
}
}
int main()
{
// freopen("input.txt", "r", stdin);
scanf("%d", &TC);
for(int tc = 1; tc <= TC; ++tc)
{
init();
input();
printf("#%d %lld\n", tc, sumBit(MAX_N));
}
}
반응형
'PS 문제 풀이 > SWEA' 카테고리의 다른 글
[SWEA] 10763 조 신나 (0) | 2021.05.23 |
---|---|
[SWEA] 1849 영준이의 무게측정 (0) | 2021.05.23 |
[SWEA] 4534 트리 흑백 색칠 (0) | 2021.05.22 |
[SWEA] 9236 곰돌이 (0) | 2021.05.22 |
[SWEA] 4747 사막에서 만난 지니 (0) | 2021.05.22 |
댓글