Implementation
출처: Codeforces B. Luxurious Houses
SOL)
오른쪽 배열에서 최대값을 계속 알고 있으면 된다.
굳이 정렬을 할 필요도 없다.
#include <stdio.h>
int n, p, arr[100009], res[100009];
int main()
{
//freopen("input.txt", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &arr[i]);
for (int i = n; i >= 1; i--)
{
if (arr[p]<arr[i]) p = i;
else res[i] = arr[p] - arr[i] + 1;
}
for (int i = 1; i <= n; i++) printf("%d ", res[i]);
return 0;
}
int n, p, arr[100009], res[100009];
int main()
{
//freopen("input.txt", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &arr[i]);
for (int i = n; i >= 1; i--)
{
if (arr[p]<arr[i]) p = i;
else res[i] = arr[p] - arr[i] + 1;
}
for (int i = 1; i <= n; i++) printf("%d ", res[i]);
return 0;
}
댓글 없음:
댓글 쓰기