MAX11189's blog

By MAX11189, history, 2 years ago, In Russian

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

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

  • Vote: I like it
  • +1
  • Vote: I do not like it

»
2 years ago, # |
Rev. 4   Vote: I like it 0 Vote: I do not like it

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!