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 | tourist | 4009 |
2 | jiangly | 3773 |
3 | Radewoosh | 3646 |
4 | ecnerwala | 3624 |
5 | jqdai0815 | 3620 |
5 | Benq | 3620 |
7 | orzdevinwang | 3612 |
8 | Geothermal | 3569 |
8 | cnnfls_csy | 3569 |
10 | gyh20 | 3447 |
# | User | Contrib. |
---|---|---|
1 | awoo | 161 |
2 | maomao90 | 160 |
3 | nor | 157 |
4 | atcoder_official | 156 |
4 | cry | 156 |
6 | -is-this-fft- | 155 |
7 | maroonrk | 154 |
8 | adamant | 153 |
9 | Um_nik | 151 |
10 | djm03178 | 146 |
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; }
Rev. | Lang. | By | When | Δ | Comment | |
---|---|---|---|---|---|---|
en3 |
![]() |
rpmdoestuff | 2023-06-04 09:41:57 | 48 | ||
en2 |
![]() |
rpmdoestuff | 2023-06-04 09:41:06 | 15 | ||
en1 |
![]() |
rpmdoestuff | 2023-06-04 09:37:13 | 1119 | Initial revision (published) |
Name |
---|