Пожалуйста, подпишитесь на официальный канал Codeforces в Telegram по ссылке https://t.me/codeforces_official. ×

Блог пользователя MAX11189

Автор MAX11189, история, 2 года назад, По-русски

Can anybody explain me how to solve E using binnary search(I can`t understand editorial)

https://codeforces.com/contest/1692/problem/E

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
2 года назад, # |
Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится

Note: I use 1-indexing and a translator.

Idea: let's go through all possible subarrays [i..j], and if sum of elements is equal to s, then recalculate the answer: ans = min(ans, i — 1 + n — j) — that is, we need to remove (i — 1) elements from the beginning and (n — j) from the end.

This is O(n^2), we can improve with binary search:

Let's count the prefix sums in the array a, and go through j. Then we need to find the leftmost i so that (a[j] — a[i — 1]) == s, in other words, find the leftmost (a[j] — s) in the prefix-sum array. Then the answer is recalculated in the same way as in the case of O(n^2).

Now O(n log n).

My solution: link

Why downvotes? I only help with solution!