Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- /** sorce for code: https://www.hackerearth.com/practice/data-structures/advanced-data-structures/segment-trees/tutorial/ **/
- /********* Credits *********/
- /// Coded by: ///
- /// - NikolaP ///
- /// ///
- /// Compiler: C++ 14 ///
- /// Date: 28 - Aug - 2019 ///
- /***************************/
- /** typedefs & #defines **/
- //{
- #define fi first
- #define se second
- #define pb push_back
- #define mp make_pair
- #define forn(i,n) for(int i = 0 ; i < (int)(n) ; ++i)
- #define forv(i,l,n) for(int i = (int)(l) ; i < (int)(n) ; ++i)
- #define all(x) (x).begin(), (x).end()
- #define allr(x) (x).rbegin(), (x).rend()
- #define mems(a,x) memset((a),(int)(x),sizeof((a)))
- #define memsb(a,x) memset((a),(bool)(x),sizeof(a))
- using namespace std;
- typedef long long int ll;
- typedef double ld;
- typedef pair<int,int> ii;
- typedef vector<int> vi;
- typedef vector<ii> vii;
- typedef vector<ll> vll;
- typedef vector<vi> vvi;
- typedef vector<vll> vvll;
- //}
- int tree[4002]; // size = n_max * 4
- int arr[1000]; // size = n_max
- void build(int node, int start, int end){
- if(start == end)
- tree[node] = arr[start];
- else{
- int mid = (start + end) / 2;
- build(2*node, start , mid);
- build(2*node + 1, mid+1, end);
- tree[node] = tree[2*node] + tree[2*node + 1];
- }
- }
- void update(int node, int start, int end, int id, int val){
- if(start == end){
- arr[id] += val;
- tree[node] += val;
- }
- else{
- int mid = (start + end) / 2;
- if(start <= id and id <= mid)
- update(2*node, start , mid , id , val);
- else
- update(2*node + 1, mid+1 , end , id , val);
- tree[node] = tree[2*node] + tree[2*node +1];
- }
- }
- int query(int node, int start, int end, int l, int r){
- if(r < start or end < l)
- return 0;
- if(l <= start and end <= r)
- return tree[node];
- int mid = (start + end) / 2;
- int p1 = query(2*node, start , mid, l , r);
- int p2 = query(2*node+1, mid+1 , end, l , r);
- return (p1 + p2);
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin.tie(0);
- cout.precision(8);
- // cout << fixed;
- int n; cin >> n;
- forn(i,n){
- cin >> arr[i];
- }
- build(1,0,n-1);
- cout << query(1,0,n-1,1,2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment