fn merge_and_count_split_inv( v1:  Vec<i32>, v2: Vec<i32>) ->   VecAndCount  {
	let (mut l_ctr,mut r_ctr,mut split_inv) = (0,0,0);
	let mut v3: Vec<i32> = Vec::new();

	while l_ctr < v1.len() && r_ctr < v2.len(){
		
		if v1[l_ctr] < v2[r_ctr]{
			v3.push(v1[l_ctr]);
			l_ctr = l_ctr + 1;
		}

		else{
			split_inv = split_inv + (v1.len() - l_ctr);
			v3.push(v2[r_ctr]);
			r_ctr = r_ctr + 1;

		}}

/*

		WHEN THIS INVLADE CODE SUCH AS THE BELOW IS RAN COMPILER NEVER GETS TO THE RETURN STATEMENT AND IT COMPLAINS ABOUT NOT HAVING A RETURN VALUE INSTEAD OF THIS INVLAID CODE
		v3.push(v1[l_ctr:v1.len()]); 


*/


		for _x in l_ctr.. v1.len(){
			v3.push(v1[_x]);
		}

		for _x in r_ctr..v2.len(){
			v3.push(v2[_x]);
		}
		build_VecAndCount(v3,split_inv)

		


	}
//takes two sorted vectors, counts split inversions and returns 
takes two sorted vectors, counts split inversions and returns
takes two sorted vectors counts split inversions and returns
fn merge_and_count_split_inv( v1:  Vec<i32>, v2: Vec<i32>) ->   VecAndCount  {
	let (mut l_ctr,mut r_ctr,mut split_inv) = (0,0,0);
	let mut v3: Vec<i32> = Vec::new();
	while l_ctr < v1.len() && r_ctr < v2.len(){
		if v1[l_ctr] < v2[r_ctr]{
			v3.push(v1[l_ctr]);
			l_ctr = l_ctr + 1;
		}
		else{
			split_inv = split_inv + (v1.len() - l_ctr);
			v3.push(v2[r_ctr]);
			r_ctr = r_ctr + 1;
		}}
/*
		WHEN THIS INVLADE CODE SUCH AS THE BELOW IS RAN COMPILER NEVER GETS TO THE RETURN STATEMENT AND IT COMPLAINS ABOUT NOT HAVING A RETURN VALUE INSTEAD OF THIS INVLAID CODE
		v3.push(v1[l_ctr:v1.len()]); 
*/
		for _x in l_ctr.. v1.len(){
			v3.push(v1[_x]);
		}
		for _x in r_ctr..v2.len(){
			v3.push(v2[_x]);
		}
		build_VecAndCount(v3,split_inv)
	}
fn merge_and_count_split_inv ( v1 : Vec < i32 > , v2 : Vec < i32 > ) -> VecAndCount { let ( mut l_ctr , mut r_ctr , mut split_inv ) = ( 0 , 0 , 0 ) ; let mut v3 : Vec < i32 > = Vec :: new ( ) ; while l_ctr < v1 . len ( ) && r_ctr < v2 . len ( ) { if v1 [ l_ctr ] < v2 [ r_ctr ] { v3 . push ( v1 [ l_ctr ] ) ; l_ctr = l_ctr + 1 ; } else { split_inv = split_inv + ( v1 . len ( ) - l_ctr ) ; v3 . push ( v2 [ r_ctr ] ) ; r_ctr = r_ctr + 1 ; } } /*

		WHEN THIS INVLADE CODE SUCH AS THE BELOW IS RAN COMPILER NEVER GETS TO THE RETURN STATEMENT AND IT COMPLAINS ABOUT NOT HAVING A RETURN VALUE INSTEAD OF THIS INVLAID CODE
		v3.push(v1[l_ctr:v1.len()]); 


*/ for _x in l_ctr .. v1 . len ( ) { v3 . push ( v1 [ _x ] ) ; } for _x in r_ctr .. v2 . len ( ) { v3 . push ( v2 [ _x ] ) ; } build_VecAndCount ( v3 , split_inv ) }
takes two sorted vectors, counts split inversions and returns
takes two sorted vectors counts split inversions and returns
v1
Vec<i32>
v2
Vec<i32>
v1
Vec<i32>
v2
Vec<i32>