SEGTREES Runtime Error

Правка en1, от saru95, 2015-08-30 09:05:39

This seems to be my simple implementation of segemnt tree .However I am getting a runtime error. Can anyone help me out with this ? ~~~~~

include

include

include

include

include

include <math.h>

include

include

include

include

include

include

include

include <stdio.h>

include

include

include

include

include

include

include <memory.h>

define all(a) (a).begin(),(a).end()

define gcd __gcd

define bitcount __builtin_popcount

define MAXN 100000

using namespace std;

typedef std::vector vi; typedef std::vector<std::string> vs; typedef std::pair<int, int> pii; typedef std::set si; typedef std::map<std::string, int> msi;

int tree[MAXN] ; int a[20] ;

void buildTree(int top, int l, int r) { if(l==r) tree[top] = a[l] ; else { int mid = (l + r) / 2 ; buildTree(top*2+1,l,mid) ; buildTree(top*2+2 ,mid+1,r) ; tree[top] = max(tree[top*2+1],tree[top*2+2]) ; } }

int rangeMaxQuery(int qlow, int qhigh, int l, int r, int top) { if(qlow<=l && qhigh>=r) return tree[top] ; if(qlow>r || qhigh<l) return MAXN ; int mid = (l + r) / 2 ; return (max(rangeMaxQuery(qlow, qhigh,l,mid,2*top+1),rangeMaxQuery(qlow, qhigh,mid+1,r,2*top+2))) ;

}

void updateTree(int l,int r, int qlow, int qhigh, int top, int value) { if(l > r || l >qhigh || r < qlow) { return; } if(l==r){ tree[top] += value ; } updateTree(l,(l+r)/2,qlow,qhigh,top*2+1,value) ; updateTree((l+r)/2+1,r,qlow,qhigh,top*2+2,value) ; tree[top] = max(tree[top*2+1],tree[top*2+2]) ; }

int main(int argc, char const *argv[]) { for(int i =0;i<20;i++) a[i] = 1 ; buildTree(0,0,19) ; updateTree(0, 19, 0, 6,0, 5) ; updateTree(0, 19,7, 10, 0, 12) ; updateTree(0,19, 10, 19,0, 100) ;

cout << rangeMaxQuery(0, 19, 0, 19, 0) << endl; 
return 0;

} ~~~~~

Теги segment tree

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en3 Английский saru95 2015-08-30 09:07:17 4
en2 Английский saru95 2015-08-30 09:06:21 14
en1 Английский saru95 2015-08-30 09:05:39 2046 Initial revision (published)