Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //строительство дерево отрезков на максимум
- vector<int> max_build(const vector<int>& array, const int& lenght)
- {
- if (lenght % 2 == 0)
- {
- vector<int> output(lenght * 2 - 1);
- for (int i = 0; i < lenght; i++)
- {
- output[lenght - 1 + i] = array[i];
- }
- for (int i = lenght - 2; i >= 0; i--)
- {
- output[i] = max(output[i * 2 + 1], output[i * 2 + 2]);
- }
- return output;
- }
- else
- {
- vector<int> output((lenght + 1) * 2 - 1);
- for (int i = 0; i < lenght; i++)
- {
- output[lenght + i] = array[i];
- }
- for (int i = lenght - 1; i >= 0; i--)
- {
- output[i] = max(output[i * 2 + 1], output[i * 2 + 2]);
- }
- return output;
- }
- }
- // нахождение максимума
- int max_found(const int l, const int r, const int x, const int lx, const int rx, const vector<int>& array)
- {
- if (l >= rx or lx >= r)
- return 0;
- if (lx >= l and rx <= r)
- return array[x];
- int m = (lx + rx) / 2;
- int sl = sum(l, r, 2 * x + 1, lx, m, array);
- int sr = sum(l, r, 2 * x + 2, m, rx, array);
- return max(sl, sr);
- }
Advertisement
Add Comment
Please, Sign In to add comment