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); }
/* -------------------------------------------------------------------------------- ------ 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; }
FacetComplex::FacetComplex(const list<facet>& l) { for (list<facet>::const_iterator it=l.begin();it!=l.end();++it) myInsert(*it); }//FacetComplex