Loading [MathJax]/jax/output/HTML-CSS/jax.js

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۲۶:الگوریتم ها:سوال ۵

دومین سمت راست‌ترین کوچک‌تر

فرض کنید A آرایه‌ای به طول n است. از روی A آرایه B را به این صورت تعریف می‌کنیم. به ازای هر i (0i<n), B[i] برابر بزرگترین عددی مانند j است که 0j<i و A[j]<A[i]. در صورتی که عددی مانند j با خاصیت گفته شده وجود نداشت B[i] برابر 1 است. حال آرایه C را از روی آرایه‌های A و B به این صورت تعریف می‌کنیم. به ازای هر i (0i<n), C[i] برابر بزرگترین عددی مانند j است که 0j<B[i] و A[j]<A[i]. در صورتی که عددی مانند j با خاصیت گفته شده وجود نداشت C[i] برابر 1 است.

الگوریتمی از O(n) ارائه کنید که از روی آرایه A آرایه C را به دست آورد.


ابزار صفحه