Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include < iostream>
- #include <vector>
- using namespace std;
- vector<int> build(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] = 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] = output[i * 2 + 1] + output[i * 2 + 2];
- }
- return output;
- }
- }
- int sum(int l, int r, int x, int lx, 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 sl + sr;
- }
- int main()
- {
- int x;
- int number;
- vector<int> array;
- cin >> number;
- for(int i =0;i<number; i++)
- {
- cin >> x;
- array.push_back(x);
- }
- cout << endl << endl;
- vector<int> a = build(array, array.size());
- int left;
- int right;
- int node;
- cin >> left >> right >> node;
- cout << sum(left,right,node,0,a.size(),a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement