به شما جایگشت p از اعداد 1 تا n داده شده است، شما باید تعداد 1≤i≤j≤n هایی را بیابید که اعداد pi تا pj یک بازه پشتسرهم از اعداد را تشکیل میدهد. برای مثال پاسخ سوال برای جایگشت <1,3,2,4> جفت i و jهای زیر است:
در تنها سطر خروجی تعداد (i,j)های مورد نظر را چاپ نمایید.
ورودی نمونه | خروجی نمونه |
---|---|
4 1 3 2 4 | 8 |
5 1 2 3 4 5 | 15 |
پاسخ
فرض کنید بازه (i,j) یکی از بازههای مورد نظر ما باشد. چون تمام اعداد pi ، pi+1 ، ⋯ ، pj در یک بازه قرار دارند، پس شرط زیر بر قرار است:
میتوان نشان داد که اگر یک بازه (i,j) شرط بالا را داشته باشد، اعداد p_i تا p_j در یک بازه قرار خواهند داشت.
پس کافیست تعداد (i,j) هایی را بشماریم که شرط بالا را دارند.
برای این کار میتوان min[i][j] و max[i][j] را برای همه اعداد 1 تا n به صورت پویا بهدست بیاوریم و شرط گفته شده را برای تمام بازهها چک کنیم.
پیچیدگی
ساختن آریه min و max را میتوان در زمان o(n^2) انجام داد و چک کردن هر بازه در زمان o(1) انجام میشود. پس میتوان همه بازهها را در زمان o(n^2) چک کرد.
پیچیدگی زمانی الگوریتم گفته شده برابر با o(n^2) است.