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 | Benq | 3676 |
| 2 | Kevin114514 | 3659 |
| 3 | jiangly | 3640 |
| 4 | turmax | 3450 |
| 5 | tourist | 3382 |
| 6 | strapple | 3360 |
| 7 | Um_nik | 3354 |
| 8 | squareOf105 | 3348 |
| 9 | maroonrk | 3312 |
| 10 | idontwannadothis…e | 3191 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 155 |
| 2 | nik_exists | 151 |
| 3 | maspy | 149 |
| 4 | AmShZ | 145 |
| 5 | Um_nik | 143 |
| 6 | Errichto | 139 |
| 7 | BledDest | 136 |
| 8 | adamant | 134 |
| 9 | maroonrk | 132 |
| 10 | cry | 130 |
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 |
|---|


