int sumRange(Node* node, int low, int high) { if (node->start == low && node->end == high) return node->sum; int mid = node->start + (node->end - node->start) / 2; if (high <= mid) return sumRange(node->left, low, high); else if (low > mid) return sumRange(node->right, low, high); else return sumRange(node->left, low, mid) + sumRange(node->right, mid + 1, high); }
int main() { int nums[10] = {1,2,4,-2,4,6,-1,4,10,21}; int numsSize = 10; struct NumArray* numArray = NumArrayCreate(nums, numsSize); int a=sumRange(numArray, 0, 1); int b=sumRange(numArray, 1, 2); int c=sumRange(numArray, 4, 9); NumArrayFree(numArray); printf("%d %d %d\n", a, b, c); return 0; }
int sumRange(MyTreeNode* root, int i, int j) { if (!root) { return 0; } if (root->begin == i && root->end == j) { return root->sum; } int mid = root->begin + (root->end - root->begin) / 2; if (i > mid) { return sumRange(root->right, i, j); } else if (j <= mid) { return sumRange(root->left, i, j); } else { return sumRange(root->left, i, mid) + sumRange(root->right, mid + 1, j); } }
int main() { int sum, i; int a[] = {-2, 0, 3, -5, 2, -1}; struct NumArray *numArray; numArray = NumArrayCreate(a, 6); printf("numArray->size = %d\n", numArray->size); for (i = 0; i < numArray->size; ++i) { printf("%d\n", numArray->nums[i]); } sum = sumRange(numArray, 0, 1); printf("sum1 = %d\n", sum); sum = sumRange(numArray, 1, 2); printf("sum2 = %d\n", sum); NumArrayFree(numArray); return 0; }
bool ZMeshBilateralFilter::apply(const Eigen::MatrixXf& input, const Eigen::VectorXf& weights, const std::vector<bool>& tags) { if (pAnnSearch_==NULL) return false; if (getRangeDim()+getSpatialDim()!=input.cols()) return false; int nSize = input.rows(); output_ = input; pAnnSearch_->setFlags(tags); float searchRad = filterPara_.spatial_sigma*sqrt(3.0); for (int i=0; i<nSize; i++) { if (!tags[i]) continue; Eigen::VectorXf v(input.row(i)); Eigen::VectorXi nnIdx; Eigen::VectorXf nnDists; // query Eigen::VectorXf queryV(v.head(spatialDim_)); Eigen::VectorXf rangeV(v.tail(rangeDim_)); int queryNum = pAnnSearch_->queryFRPoint(queryV, searchRad, 0, nnIdx, nnDists); //int queryNum = queryMeshTool_->query(i, 20, nnIdx, nnDists); // convolute Eigen::VectorXf sumRange(rangeDim_); sumRange.fill(0); float sumWeight = 0; for (int j=1; j<queryNum; j++) { int idx = nnIdx[j]; if (!tags[idx]) continue; Eigen::VectorXf rangeU(input.row(idx).tail(rangeDim_)); float distWeight = ZKernelFuncs::GaussianKernelFunc(sqrt(nnDists(j)), filterPara_.spatial_sigma); // if kernelFuncA_==NULL, then only using spatial filter float rangeWeidht = kernelFuncA_ ? kernelFuncA_(rangeV, rangeU, filterPara_.range_sigma) : 1.f; float weight = rangeWeidht*distWeight*weights(idx); //if (i==1) // std::cout << rangeU << " * " << distWeight << "*" << rangeWeidht << "*" << weights(idx) << "\n"; sumWeight += weight; sumRange += rangeU*weight; } if (!g_isZero(sumWeight)) output_.row(i).tail(rangeDim_) = sumRange*(1.f/sumWeight); } return true; }
int main(void) { srand( time( NULL ) ); char op; double double1; double double2; int int1; int int2; printf( "%s\n", "add ( + ) + double double" ); printf( "%s\n", "subtract ( - ) - double double" ); printf( "%s\n", "multiply ( * ) * double double" ); printf( "%s\n", "divide ( / ) / double double" ); printf( "%s\n", "power ( ^ ) ^ double int" ); printf( "%s\n", "exponential ( e ) e int" ); printf( "%s\n", "factorial ( ! ) ! int" ); printf( "%s\n", "random range ( r ) r int int" ); printf( "%s\n", "sum range ( s ) s int int" ); printf( "%s\n", "round ( ~ ) ~ double" ); printf( "%s\n", "roundup ( ' ) ` double" ); printf( "%s\n", "rounddown ( _ ) _ double" ); printf( "%s\n", "minimum ( < ) < double double" ); printf( "%s\n", "maximum ( > ) > double double" ); printf( "%s\n", "quit ( q ) q" ); do { scanf( " %c", &op ); switch ( op ) { case '+': scanf( "%lf%lf", &double1, &double2 ); printf( "%.2f\n", double1 + double2 ); break; case '-': scanf( "%lf%lf", &double1, &double2 ); printf( "%.2f\n", double1 - double2 ); break; case '*': scanf( "%lf%lf", &double1, &double2 ); printf( "%.2f\n", double1 * double2 ); break; case '/': scanf( "%lf%lf", &double1, &double2 ); if ( double2 != 0 ) { printf( "%.2f\n", double1 / double2 ); } else { printf( "%s\n", "Error: Dividing by 0" ); } break; case '^': scanf( "%lf%d", &double1, &int1 ); printf( "%.4f\n", power( double1, int1 ) ); break; case 'e': scanf( "%d", &int1 ); printf( "%lf\n", power( 2.71828182846, int1 ) ); break; case '!': scanf( "%d", &int1 ); printf( "%d\n", factorial( int1 ) ); break; case 'r': scanf( "%d%d", &int1, &int2 ); printf( "%d\n", randomRange( int1, int2 ) ); break; case 's': scanf( "%d%d", &int1, &int2 ); printf( "%d\n", sumRange( int1, int2 ) ); break; case '~': scanf( "%lf", &double1 ); printf( "%d\n", roundDouble( double1 ) ); break; case '`': scanf( "%lf", &double1 ); printf( "%d\n", (int) double1 + 1 ); break; case '_': scanf( "%lf", &double1 ); printf( "%d\n", (int) double1 ); break; case '<': scanf( "%lf%lf", &double1, &double2 ); if ( double1 < double2 ) { printf( "%.2f\n", double1 ); } else { printf( "%.2f\n", double2 ); } break; case '>': scanf( "%lf%lf", &double1, &double2 ); if ( double1 > double2 ) { printf( "%.2f\n", double1 ); } else { printf( "%.2f\n", double2 ); } break; case 'q': printf( "%s\n", "Good-bye." ); break; default: printf( "%s\n", "Invalid input." ); break; } } while(op !='q'); }
int sumRange(int i, int j) { if (i > j) { return - 1; } return sumRange(root, i, j); }
int sumRange(int i, int j) { return sumRange(_root, i, j); }
int sumRegion(int row1, int col1, int row2, int col2) { row1++, col1++, row2++, col2++; return sumRange(row2, col2) - sumRange(row1 - 1, col2) - \ sumRange(row2, col1 - 1) + sumRange(row1 - 1, col1 - 1); }
int sumRange(int i, int j) { return sumRange(j + 1) - sumRange(i); }
void update(int i, int val) { int diff = sumRange(i, i) - val; for(int j = i+1; j < sum.size(); j++) sum[j] -= diff; }