When submitting a solution in C++, please select either C++14 (GCC 6-32) or C++17 (GCC 7-32) as your compiler. ×

nikizakr's blog

By nikizakr, history, 6 years ago, In English

the build function in segment tree :

void build(int id = 1,int l = 0,int r = n){
	if(r - l < 2){	//	l + 1 == r
		s[id] = a[l];
		return ;
	}
	int mid = (l+r)/2;
	build(id * 2, l, mid);
	build(id * 2 + 1, mid, r);
	s[id] = s[id * 2] + s[id * 2 + 1];
}

divide and conquer algorithm to find maximum element in array :

int Max(int s = 1 , int e = n){
      if(s == e) return arr[s] ; 
      int choice1 = arr[s] , choice2 = arr[e] ; 
      choice1 = max( choice1 , Max( s , (s + e)/2 ) ; 
      choice2 = max( choice2 , Max( (s + e)/2 + 1 , e )   ;
     return max(choice1 , choice2)  ; 
}

why the complexity of the first function is O( n * log(n) ) And the second is O(n) thanks for your help :D

  • Vote: I like it
  • 0
  • Vote: I do not like it

| Write comment?
»
6 years ago, # |
  Vote: I like it +11 Vote: I do not like it

The complexity of the first algorithm is also O(n).