struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {
	struct TreeNode *p = NULL;

	myInsert(&p, nums, 0, numsSize-1);

	return p;
}
 void myInsert(vector<int>& temp,int target,int left,int right){
     if(right - left <= 1 ){
         if(target <= temp[left]){
             temp.insert(temp.begin()+left,target);
         }else{
             temp.insert(temp.begin()+right,target);
         }
         return;
     }
     int mid = (left + right)/2;
     if(target >= temp [mid]){
         myInsert(temp,target,mid,right);
     }else{
         myInsert(temp,target,left,mid);
     }
 }
void myInsert(struct TreeNode **p_addr, int *nums, int left, int right)
{
	if(left > right)	return;
	/*if(left == right)	
	{
		struct TreeNode *temp = (struct TreeNode *)malloc(sizeof(struct TreeNode));
		temp->val = nums[left];
		temp->left = NULL;
		temp->right = NULL;

		*p_addr = temp;

		return ;
	}*/
	/*if(left+1 == right)
	{
		struct TreeNode *temp1 = (struct TreeNode *)malloc(sizeof(struct TreeNode));
		struct TreeNode *temp2 = (struct TreeNode *)malloc(sizeof(struct TreeNode));
		temp2->val = nums[right];
		temp2->left = NULL;
		temp2->right = NULL;

		temp1->val = nums[left];
		temp1->left = NULL;
		temp1->right = temp2;

		*p_addr = temp1;

		return ;
	}*/
	
	int mid = (left+right)/2;
	struct TreeNode *tempMid = (struct TreeNode *)malloc(sizeof(struct TreeNode));
	tempMid->val = nums[mid];
	tempMid->left = NULL;
	tempMid->right = NULL;

	*p_addr = tempMid;

	myInsert(&tempMid->left, nums, left, mid-1);
	myInsert(&tempMid->right, nums, mid+1, right);
}
Exemple #4
0
/*
--------------------------------------------------------------------------------
------ FacetComplex class functions -----------------------------------------------
--------------------------------------------------------------------------------
*/
  FacetComplex::FacetComplex(const PolyRing& /*P*/, const PolyList& PL)
   {
     //      facet f_tmp;
//      vector<long> v(NumIndets(P));
      for (PolyList::const_iterator it=PL.begin(); it!=PL.end();++it)
      {
        //        exponents(v,LPP(*it));
        //	f_tmp=facet(v);
        //	myInsert(f_tmp);
        myInsert(facet(LPP(*it)));
      }
    }//FacetComplex
 vector<int> countSmaller(vector<int>& nums) {
     int size = nums.size();
     if(size == 0 ){
         vector<int> ans;
         return ans;
     }
     vector<int> ans(size,0);
     vector<int> temp;
     temp.reserve(size);
     temp.push_back(nums[size-1]);
     
     for(int i=size-2;i>=0;i--){
         int target = nums[i];
         myInsert(temp,target,0,temp.size());
         ans[i] = getCount(temp,target,0,temp.size());
     }
     
     return ans;   
 }
Exemple #6
0
 FacetComplex::FacetComplex(const list<facet>& l)
 {
   for (list<facet>::const_iterator it=l.begin();it!=l.end();++it)
     myInsert(*it);
 }//FacetComplex