nq1s788

Untitled

Oct 26th, 2025
1,025
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.92 KB | None | 0 0
  1. Предположим мы хотим проверить удовлетворяет ли весь массив искомому требованию. Если это так, то мы можем вывести весь массив как ответ. Иначе один из двух крайних элементов не удовлетворяет нашим требованиям. Из этого можно сделать вывод, что все отрезки содержащие элемент, который не удовлетворяет нашим требованиям будут также некорректными, потому что этот крайний элемент будет оставаться минимумом/максимумом.
  2.  
  3. Из факта выше следует алгоритм: давайте посмотрим на подотрезок [𝑙;𝑟], который изначально равен [1;𝑛]. Если 𝑎𝑙=min(𝑎𝑙,𝑎𝑙+1,,𝑎𝑟) или 𝑎𝑙=max(𝑎𝑙,𝑎𝑙+1,,𝑎𝑟), то перейдем к отрезку [𝑙+1;𝑟]. Также необходимо аналогичное рассуждения для 𝑎𝑟. Таким образом мы либо через сколько-то иттераций получим требуемый подотрезок, либо получим 𝑙==𝑟 и ответом будет −1.
  4.  
  5. Пример кода на python:
  6. n = int(input())
  7. a = list(map(int, input().split()))
  8. l = 0
  9. r = n - 1
  10. mn = 1
  11. mx = n
  12. while 0 == 0:
  13.     if l >= r:
  14.         print(-1)
  15.         break
  16.     elif a[l] == mn or a[l] == mx:
  17.         if a[l] == mn:
  18.             mn += 1
  19.         if a[l] == mx:
  20.             mx -= 1
  21.         l += 1
  22.     elif a[r] == mn or a[r] == mx:
  23.         if a[r] == mn:
  24.             mn += 1
  25.         if a[r] == mx:
  26.             mx -= 1
  27.         r -= 1
  28.     else:
  29.         print(l + 1, r + 1)
  30.         break
Add Comment
Please, Sign In to add comment