اولین باره که به کاهو میای؟ راهنمای سایت رو حتما بخون!

ورود ثبت‌نام راهنما درباره‌ی کاهو
پرسش‌ها برچسب‌ها کاربر‌ها سوال بپرسید!

آمار پرسش:

  • پرسیده شده: 2014-07-16 09:24:37 -0500
  • مشاهده شده: 480 بار
  • بروز شده: 2014-08-28 07:58:55 -0500

پرسش‌های مشابه:

یافتن موقعیت ایستگاه های قطار با پرسیدن فاصله آنها

تعطیلات--المپیاد جهانی 2014

دوست--المپیاد جهانی 2014

تله کابین--المپیاد جهانی 2014

یافتن کوچکترین پیچ و مهره با مقایسه آنها

آشپزباشی:‌ مرتب کردن پشته با برعکس کردن یک دنباله متوالی از ابتدای آن

دنباله و جادوگر - دوره ی 24 - مرحله ی 2

الگوریتمی برای کمینه کردن تعداد دفعات بازشدن کشوها

الگوریتم محاسبه لگاریتم-سوال مسابقه دانش آموزی صنعتی شریف

آیا گراف قویا همبند است؟

نکاتی در مورد نوشتن پاسخ:

در این قسمت می‌تونی به یک پرسش پاسخ بدی. اگه می‌خوای در مورد پرسش بحث و اظهار نظر کنی از قسمت «ثبت نظر» استفاده کن.
پاسخت رو دقیق و کامل بنویس، از عکس استفاده کن و اگه لازمه به منابع (کتاب یا سایت) ارجاع بده.
اگه پرسش یا پاسخ‌ها مفید هستند حتما بهشون رای بده تا پرسش‌ها و پاسخ‌های خوب مشخص بشن.

استفاده از ویرایشگر:

توی قسمت پیش‌نمایش می‌تونی ببینی متنی که نوشتی چجوری روی سایت دیده میشه.
خیلی مهم: برای اینکه به خط بعد بری باید دوتا Enter بزنی.
می‌تونی از تگ‌های معمولی و ساده‌ی html هم استفاده کنی.
با دکمه‌هایی که بالای ویرایش‌گر قرار دارند کلی کار می‌شه کرد. از عکس‌گذاشتن بگیر تا لیست شماره‌دار. حتما امتحان‌شون کن.

علائم ریاضی:

برای نوشتن علائم ریاضی می‌تونی از Mathjax استفاده کنی. راهنمای Mathjax رو از سایت math.stackexchange بخون.
برای نوشتن عبارت ریاضی وسط جمله، اون عبارت رو بین دوتا $ قرار بده.
برای نوشتن عبارت ریاضی تو یه خط جدید اون رو بین دوتا $$ قرار بده.

دیوار--المپیاد جهانی 2014

7

ﺟﯿﺎن-ﺟﯿﺎ میﺧﻮاﻫﺪ ﺑﺎ روی ﻫﻢ ﭼﯿﺪن ﺗﻌﺪادی آﺟﺮ ﻫﻢاﻧﺪازه ﯾا دﯾﻮار ﺑﺴﺎزد. اﯾﻦ دﯾﻮار از n ﺳﺘﻮن آﺟﺮی ﺗﺸکیل ﺷﺪه اﺳﺖ ﮐﻪ ﺑﻪ ﺗﺮﺗﯿﺐ از ﭼﭗ ﺑﻪ راﺳﺖ ﺑﺎ ﺷﻤﺎرهﻫﺎی ٠ ﺗﺎ n − ١ ﺷﻤﺎرهﮔﺬاری ﺷﺪهاﻧﺪ. ﺳﺘﻮنﻫﺎ ﻣﻤکن اﺳﺖ ارﺗﻔﺎعﻫﺎی ﻣﺘﻔﺎوتی داﺷﺘﻪ ﺑﺎﺷﻨﺪ. ارﺗﻔﺎع یک ﺳﺘﻮن ﺑﺮاﺑﺮ ﺗﻌﺪاد آﺟﺮﻫﺎی ﺑﻪﮐﺎررﻓﺘﻪ در آن اﺳﺖ.

ﺟﯿﺎن-ﺟﯿﺎ دﯾﻮار را ﺑﻪ اﯾﻦ ﺷکل می سازد. در اﺑﺘﺪا ﻫﻤﻪی ﺳﺘﻮنﻫﺎ ﺑﺪون آﺟﺮ ﻫﺴﺘﻨﺪ. ﺳﭙﺲ ﺟﯿﺎن-ﺟﯿﺎ k ﻣﺮﺣﻠﻪی اﻓﺰودن ﯾﺎ ﺣﺬف آﺟﺮﻫﺎ را اﻧﺠﺎم می دﻫﺪ، و ﭘﺲ از اﺗﻤﺎم اﯾﻦ k ﻣﺮﺣﻠﻪ ﻓﺮاﯾﻨﺪ ﺳﺎﺧﺖ دﯾﻮار ﺑﻪ ﭘﺎﯾﺎن می رﺳﺪ. در ﻫﺮ ﻣﺮﺣﻠﻪ، یک ﺑﺎزه از ﺳﺘﻮنﻫﺎی ﻣﺘﻮالی و یک ارﺗﻔﺎع h ﺑﻪ ﺟﯿﺎن-ﺟﯿﺎ داده میﺷﻮد و او ﮐﺎرﻫﺎی زﯾﺮ را اﻧﺠﺎم می دﻫﺪ:

• در ﻣﺮﺣﻠﻪی اﻓﺰودن، ﺟﯿﺎن-ﺟﯿﺎ ﺑﻪ ﺳﺘﻮنﻫﺎیی در ﺑﺎزهی دادهﺷﺪه ﮐﻪ ﮐﻢﺗﺮ از h آﺟﺮ دارﻧﺪ آنﻗﺪر آﺟﺮ اﺿﺎﻓﻪ می ﮐﻨﺪ ﺗﺎ ارﺗﻔﺎع آنﻫﺎ دﻗﯿﻘﺎ h ﺷﻮد. او روی ﺳﺘﻮنﻫﺎیی ﮐﻪ ﺑﯿﺶﺗﺮ ﯾﺎ ﻣﺴﺎوی h آﺟﺮ دارﻧﺪ ﮐﺎری اﻧﺠﺎم نمی دﻫﺪ.

• در ﻣﺮﺣﻠﻪی ﺣﺬف، ﺟﯿﺎن-ﺟﯿﺎ از ﺳﺘﻮنﻫﺎیی در ﺑﺎزهی دادهﺷﺪه ﮐﻪ ﺑﯿﺶﺗﺮ از h آﺟﺮ دارﻧﺪ آنﻗﺪر آﺟﺮ ﺣﺬف می ﮐﻨﺪ ﺗﺎ ارﺗﻔﺎع آنﻫﺎ دﻗﯿﻘﺎ h ﺷﻮد. او روی ﺳﺘﻮنﻫﺎیی ﮐﻪ ﮐﻢﺗﺮ ﯾﺎ ﻣﺴﺎوی h آﺟﺮ دارﻧﺪ ﮐﺎری اﻧﺠﺎم نمی دﻫﺪ.

ﺑﺎ داﺷﺘﻦ ﺗﻮﺻﯿﻒ k ﻣﺮﺣﻠﻪ، ﺗﻌﺪاد آﺟﺮﻫﺎی ﻫﺮ یک از ﺳﺘﻮنﻫﺎ را ﭘﺲ از آن ﮐﻪ ﺗﻤﺎمی ﻣﺮاﺣﻞ ﺧﺎﺗﻤﻪ ﯾﺎﻓﺘﻨﺪ، ﻣﺤﺎﺳﺒﻪ ﮐﻨﯿﺪ.

المپیاد-جهانی ۲۰۱۴ بازی الگوریتم روز-اول
2014-07-16 09:24:37 -0500
کنکوری 1683 ● 13 ● 27 ● 40
پاک‌کردن   ویرایش سوال
نظرات

سلام میدونستید انجمن علمی نخبگان دانشگاه صنعتی شریف مسابقه تخصصی مهارت سنجی برنامه نویسی و داده کاوی گذاشته است آدرس سایتش www.fanavard.com

2015-08-06 08:42:00 -0500 امیر شکری

سلام میگم یک سر به سایت www.fanavard.ir بزنید. مسابقات برنامه نویسی شون شروع شده. گواهی رسمی از طرف دانشگاه شریف می ده. 50 تا سکه هم جایزشه

2016-10-26 05:48:37 -0500 امیر شکری

سلام میگم یک سر به سایت www.fanavard.ir بزنید. مسابقات برنامه نویسی شون شروع شده. گواهی رسمی از طرف دانشگاه شریف می ده. 50 تا سکه هم جایزشه

2016-10-26 06:06:58 -0500 امیر شکری

1 پاسخ

7

پیش نیاز برای خوندن این راه حل دونستن انواع سگمنت تری و نحوه ی پیاده سازی اوناست ... از اینجا میتونین اینا رو یاد بگیرین! :)


اول کار دو تا سگمنت تری میسازیم ... $SGTMin$ و $SGTMax$ که وطیفه شان به ترتیب نگهداری مینیمم ارتفاع بازه ها و ماکزیمم ارتفاع بازه ها هست. اولش همه ی رئوس $SGTMax$ برابر $INF$ هستند و همه ی رئوس $SGTMin$ برابر 0.

در حالت کلی هر کدام از پرسش ها (کاهش یا افزایش) میاد برای بازه ی $[l, r]$ کمترین ارتفاع و یا بیشترین ارتفاع (و یا هردو) رو تغییر میده. بعبارت دیگه میاد ارتفاع ستون های$l$ تا $r$ رو از یک طرف محدود میکنه (که بزرگتر یا کوچکتر از $h$ باشند). پس ما میایم این پرسش ها رو اینجوری پیاده سازی میکنیم که :

کاهش :
برای کاهش ارتفاع ساختمان های بازه ی $[l, r]$ به $h$، ما به هر دو سگمنت تری بشکل سگمنت تری های نگهداری مینیمم نگاه میکنیم و آن دو رو آپدیت میکنیم ... یعنی اگر مقدار راسی که بازه ی متناظرش با بازه ی $[l, r]$ ورودی تداخل دارد از $h$ بزرگتر بود، اون مقدار رو $h=$ قرار میدهیم وگرنه تغییرش نمیدهیم. (در نگاه اول بنظر میرسه که تنها باید $SGTMax$ رو آپدیت کنیم ولی ممکنه که مقادیری در $SGTMin$ هم از $h$ بیشتر باشن.)

افزایش :
برای افزایش هم دقیقن مثل کاهش ولی به سگمنت تری ها مثل سگمنت تری های نگهداری ماکزیمم نگاه میکنیم و آپدیت میکنیم.

(این اعمال با استفاده از lazy propagation هر کدام $O(lgN)$ طول میکشند. دقت کنید که چون برای آپدیت هر درخت دو جور دستور مختلف داریم باید دو متغیر جدا برای lazy propagation در هر راس درخت نگه داریم.)

در آخر هم هر دو درخت رو بطور کامل پیمایش میکنیم و برای هر $1 \le i \le N$، $Min_i$ و $Max_i$ رو در میاریم که یعنی طی این عملیات های انجام شده $h_i$ از دو طرف به چه مقدارهایی محدود شده. سه حالت پیش میاد :
1) $Min_i \le h_i \le Max_i$ که یعنی در طی این اعمال $h_i$ تغییری نکرده و برابر با مقدار اولیش هست.
2) $h_i < Min_i$ که یعنی در مجموع عملیات ها $h_i$ بزرگتر شده و الان برابر $Min_i$ است.
3) $h_i > Max_i$ که یعنی در مجموع عملیات ها $h_i$ کوچکتر شده و الان برابر $Max_i$ هست.
این مرحله هم چون تمام رئوس سگمنت تری ها را میپیماید در کل $O(N)$ طول میکشه .

پس در کل پیچیدگی الگوریتم از $O(N + K lg N)$ هست! $^_^$

2014-07-17 02:53:18 -0500
محمد مهدی 1955 ● 5 ● 12 ● 40
پاک‌کردن   ویرایش پاسخ
نظرات

چه حوصله ای داری شکری :دی

2014-09-01 07:52:51 -0500 ماتریکس

@ماتریکس حلش کرده بودم قبلن ... تمرین نوشتن بود! :D

2014-09-04 13:43:35 -0500 محمد مهدی

پاسخ شما

فقط در صورتی که پاسخی برای این پرسش دارید، آن را اینجا بنویسید و برای بحث کردن از قسمت «ثبت‌ نظر» استفاده کنید. شما می‌توانید قبل از وارد شدن به سایت پاسخ خود را بنویسید. این پاسخ ذخیره می‌شود و زمانی که شما وارد سایت شدید یا ثبت‌نام کردید منتشر می‌شود.

پیش‌نمایش:

کلیه‌ی حقوق این سایت متعلق به کمیته‌ی ملی المپیاد کامپیوتر است.