Hi CodeForces!
In this blog written that in problems Divide and Conquer Optimization opt[i] <= opt[i + 1]
opt[i] -> such k that gives optimal answer, for example dp[i] = dp[k - 1] + C[k][i]
Please, can you explain why?
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3603 |
| 4 | jiangly | 3583 |
| 5 | turmax | 3559 |
| 6 | tourist | 3541 |
| 7 | strapple | 3515 |
| 8 | ksun48 | 3461 |
| 9 | dXqwq | 3436 |
| 10 | Otomachi_Una | 3413 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 157 |
| 2 | adamant | 153 |
| 3 | Um_nik | 147 |
| 3 | Proof_by_QED | 147 |
| 5 | Dominater069 | 145 |
| 6 | errorgorn | 142 |
| 7 | cry | 139 |
| 8 | YuukiS | 135 |
| 9 | TheScrasse | 134 |
| 10 | chromate00 | 133 |
Hi CodeForces!
In this blog written that in problems Divide and Conquer Optimization opt[i] <= opt[i + 1]
opt[i] -> such k that gives optimal answer, for example dp[i] = dp[k - 1] + C[k][i]
Please, can you explain why?
| Name |
|---|



That monotonicity condition is what allows us to use Divide and Conquer optimization to reduce O(N^2) to O(N*logN). Take a look at some sample code.
We call solve(L, R, optima_l, optima_r) to find the optimal split points for all indices i such that L <= i <= R, subject to the condition that optima_l <= opt[i] <= optima_r. We achieve this by finding the optimal point for mid=(L+R)/2 by iterating in the range [optima_l, optima_r]. Then we call solve(L, mid-1, optima_l, optima_mid) and solve(mid+1, R, optima_mid, optima_r) recursively.
There are logN levels of recursion. Consider a single level. The TOTAL number of iterations over all intervals in that level is O(n). This is because opt[1] <= opt[2] <= opt[3] .... <= opt[N]. So this monotonicity condition is the reason we can reduce the time complexity in this manner.
Sometimes, formally proving the monotonicity condition can become difficult for a problem, maybe during an ongoing contest. In that case, I mostly rely on intuition or use another condition (which is sufficient but not necessary) to apply this optimization. I have found this second quadrangular inequality condition to be applicable to many problems. :)
Thank you)