Esempio n. 1
0
 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);
 }
Esempio n. 2
0
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);
     }
 }
Esempio n. 4
0
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;
}
Esempio n. 5
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);
 }
Esempio n. 8
0
 int sumRange(int i, int j) {
     return sumRange(_root, i, j);
 }
Esempio n. 9
0
 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);
 }
Esempio n. 10
0
	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;
 }