| 39 | } |
| 40 | |
| 41 | result query(int i, int l, int r){ |
| 42 | if(lo[i] > r || hi[i] < l) return {-INF, -INF, -INF, -INF}; |
| 43 | if(lo[i] >= l && hi[i] <= r) return {sum[i], dpl[i], dpr[i], dp[i]}; |
| 44 | result left = query(2*i, l, r); |
| 45 | result right = query(2*i+1, l, r); |
| 46 | return left + right; |
| 47 | } |
| 48 | |
| 49 | int main(){ |
| 50 | scanf("%d %d", &N, &Q); |