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 | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | jiangly | 3631 |
| 4 | Kevin114514 | 3574 |
| 5 | maroonrk | 3521 |
| 6 | strapple | 3515 |
| 7 | Radewoosh | 3461 |
| 8 | tourist | 3428 |
| 9 | turmax | 3378 |
| 10 | Um_nik | 3376 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 162 |
| 2 | adamant | 148 |
| 3 | Um_nik | 146 |
| 4 | Dominater069 | 143 |
| 5 | errorgorn | 140 |
| 6 | cry | 138 |
| 7 | Proof_by_QED | 136 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 10 | soullless | 133 |
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 |
|---|


