Processing math: 65%

المپدیا

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

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۲۲:تئوری نهایی اول:سوال ۳

سوال ۳

جایگشت ‎a1,a2,,an‎ از اعداد ‎1,2,,n‎ داده شده است. ما در هر مرحله می توانیم عملیات زیر را روی جایگشت انجام دهیم.

‎ در این عملیات یکی از اعداد جایگشت مثل ‎x‎ را انتخاب می کنیم. سپس بقیه‌ی اعداد جایگشت به چهار دسته تقسیم می‌شوند. آنهایی که قبل از ‎x‎ آمده‌اند و از ‎x‎ کوچکترند، آنهایی که بعد از ‎x‎ آمده‌اند و از ‎x‎ کوچکترند، آنهایی که قبل از ‎x‎ آمده‌اند و از ‎x‎ بزرگترند و آنهایی که از ‎x‎ بزرگترند و بعد از آن آمده‌اند. در انتهای این عملیات هر کدام از این چهار دسته نسبت به خودشان مرتب می‌شوند. مثلا اگر اعدادی که قبل از عدد ‎x‎ در جایگشت آمده‌اند و از ‎x‎ کوچکترند، ‎ai1,,aik‎ باشند که ‎i1i2ik‎ در پایان این عملیات این ‎k‎ عدد طوری در جایگاه‌های ‎i_1,\ldots‎, ‎i_k‎ قرار می‌گیرند که به ازای هر ‎j < l‎ عدد قرار گرفته در جایگاه ‎i_j‎ کمتر از عدد جایگاه ‎i_l‎ باشد.

‎ الگوریتمی از ‎O(n)‎ ارایه دهید که یک جایگشت از ورودی بگیرد و تعیین کند که آیا می‌توان با تعداد متناهی از این عملیات‌ها جایگشت را مرتب کرد یا نه. ‎

‎ نتیجه‌ی عملیات فوق روی عدد 5 در جایگشت ‎3, 8, 1, 7, 5, 4, 6, 2‎ جایگشت ‎1, 7, 3, 8, 5, 2, 6, 4‎ خواهد بود. ‎


ابزار صفحه