I am trying to solve 165C using binary search, but it is getting TLE. Can anyone help?
Here's my code: 208389930
Code
# | User | Rating |
---|---|---|
1 | Radewoosh | 3759 |
2 | orzdevinwang | 3697 |
3 | jiangly | 3662 |
4 | Benq | 3644 |
5 | -0.5 | 3545 |
6 | ecnerwala | 3505 |
7 | tourist | 3486 |
8 | inaFSTream | 3478 |
9 | maroonrk | 3454 |
10 | Rebelz | 3415 |
# | User | Contrib. |
---|---|---|
1 | adamant | 173 |
2 | awoo | 167 |
3 | SecondThread | 163 |
4 | BledDest | 162 |
4 | Um_nik | 162 |
6 | maroonrk | 161 |
6 | nor | 161 |
8 | -is-this-fft- | 150 |
9 | Geothermal | 146 |
10 | TheScrasse | 143 |
Needing help on 165C
I am trying to solve 165C using binary search, but it is getting TLE. Can anyone help?
Here's my code: 208389930
using namespace std; using ll = long long;
ll n, k; ll pre[100005]; string s;
ll bs1(ll lo){ ll l = lo, r = n, mid; while (l <= r){ mid = (l + r) / 2; if (pre[mid] — pre[lo-1] <= k){ l = mid + 1; } else { r = mid — 1; } } return r; }
ll bs2(ll lo){ ll l = lo, r = n, mid; while (l <= r){ mid = (l + r) / 2; if (pre[mid] — pre[lo-1] >= k){ r = mid — 1; } else { l = mid + 1; } } return l; }
signed main(){ ll i, res; cin >> k >> s; n = s.size(); s = " " + s; pre[0] = 0; for (i = 1; i <= n; i++){ pre[i] = pre[i-1] + s[i] — '0'; } res = 0; for (i = 1; i <= n; i++){ res += bs1(i) — bs2(i) + 1; } cout << res; }
Name |
---|