Permutation

به شما جایگشت $p$ از اعداد $1$ تا $n$ داده شده است، شما باید تعداد $1 \leq i \leq j \leq n$ هایی را بیابید که اعداد $p_i$ تا $p_j$ یک بازه پشت‌سرهم از اعداد را تشکیل می‌دهد. برای مثال پاسخ سوال برای جایگشت $<1,3,2,4>$ جفت $i$ و $j$های زیر است:

  • $(1,1)$
  • $(2,2)$
  • $(3,3)$
  • $(4,4)$
  • $(1,3)$
  • $(1,4)$
  • $(2,4)$
  • $(2,3)$

ورودی

  • در سطر اول ورودی، عدد $1 \leq n \leq 5000$ آمده است.
  • در سطر بعدی، اعداد $p_1$ تا $p_n$ آمده‌اند.

خروجی

در تنها سطر خروجی تعداد $(i,j)$های مورد نظر را چاپ نمایید.

محدودیت‌ها

  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

ورودی و خروجی نمونه

ورودی نمونه خروجی نمونه
4
1 3 2 4
8
5
1 2 3 4 5
15

پاسخ

فرض کنید بازه $(i,j)$ یکی از بازه‌های مورد نظر ما باشد. چون تمام اعداد $p_i$ ، $p_{i+1}$ ، $\cdots$ ، $p_j$ در یک بازه قرار دارند، پس شرط زیر بر قرار است:

  • $max(p_i,p_{i+1},\cdots,p_j) - min(p_i,p_{i+1},\cdots,p_j) = j-i$

می‌توان نشان داد که اگر یک بازه $(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)$ است.

▸ سوال قبل سوال بعد ◂