示例#1
0
int main()
{
      int t;
      int n, i;
      int tmp;
      long long int sum;
      int arr[100020];

      scanf("%d", &t);
      while(t--) {
            fflush(stdin);
            scanf("%d", &n);
            memset(ft, 0, sizeof(ft));
            memset(arr, 0, sizeof(arr));
            for(i = 1; i <= n; i++) {
                  scanf("%d", &tmp);
                  if (tmp > 0) arr[i] = tmp;
                  else {i--;n--;}
            }

            sum = 0;
            for (i = 1; i <= n; i++) {
                  sum = sum + rsq(arr[i] - 1);
                  adjust(arr[i], arr[i]);
            }

            printf("%lld\n", sum);
      }
      return 0;
}
TEST(static_rsq_simple, product) {
  int TEST_ARRAY[] = {1, 2, 3, 4, 5, 6};
  size_t SIZE = sizeof(TEST_ARRAY) / sizeof(TEST_ARRAY[0]);

  static_rsq<int, std::multiplies<int> > rsq(TEST_ARRAY, TEST_ARRAY + SIZE);

  ASSERT_EQ(1, rsq.range_sum(0, 1));
  ASSERT_EQ(6, rsq.range_sum(SIZE - 1, SIZE));

  ASSERT_EQ(720, rsq.range_sum(0, SIZE));

  ASSERT_EQ(60, rsq.range_sum(2, 5));
}
TEST(static_rsq_simple, sum) {
  int TEST_ARRAY[] = {1, 2, 3, 4, 5, 6};
  size_t SIZE = sizeof(TEST_ARRAY) / sizeof(TEST_ARRAY[0]);

  static_rsq<int> rsq(TEST_ARRAY, TEST_ARRAY + SIZE);

  ASSERT_EQ(1, rsq.range_sum(0, 1));
  ASSERT_EQ(6, rsq.range_sum(SIZE - 1, SIZE));

  ASSERT_EQ(21, rsq.range_sum(0, SIZE));

  ASSERT_EQ(12, rsq.range_sum(2, 5));
}
TEST(static_rsq_simple, construction_from_input_iterator) {
  std::istringstream in("1 2 3 4 5 6");
  const size_t SIZE = 6;

  static_rsq<int> rsq(std::istream_iterator<int>(in),
                     (std::istream_iterator<int>()));

  ASSERT_EQ(1, rsq.range_sum(0, 1));
  ASSERT_EQ(6, rsq.range_sum(SIZE - 1, SIZE));

  ASSERT_EQ(21, rsq.range_sum(0, SIZE));

  ASSERT_EQ(12, rsq.range_sum(2, 5));
}
示例#5
0
void main()
{
	int i,n=7;
	int a[] = {2,5,3,-1,6,4,2};
	int m=n+1;
	int tree[m];
	init_tree(tree,m); //set every node to 0

	createtree(a,tree,n);

	printf("Fenwick Tree is:\n");
	for(i=0;i<m;i++)
	{
		printf("%d ",tree[i]);
	}
	
	//updatetree(a,tree,n,2,5); //index is 2 of a[] and new value is 5
	printf("\n%d\n",rsq(tree,m,2,5));
}
TEST(static_rsq_stress, product) {
  const int TEST_SIZE = 10;

  std::vector<int> test_data;
  std::generate_n(std::back_inserter(test_data), TEST_SIZE,
                  RangeRandomNumberGenerator(1, 9));

  static_rsq<int, std::multiplies<int> > rsq(test_data.begin(),
                                             test_data.end());

  for (int from = 0; from < TEST_SIZE; ++from) {
    for (int to = from + 1; to < TEST_SIZE; ++to) {
      ASSERT_EQ(std::accumulate(test_data.begin() + from,
                                test_data.begin() + to,
                                1, std::multiplies<int>()),
                rsq.range_sum(from, to));
    }
  }
}
TEST(static_rsq_stress, sum_push_back) {
  const int TEST_SIZE = 50;

  std::vector<int> test_data;
  static_rsq<int> rsq(test_data.begin(), test_data.end());

  for (int size = 0; size < TEST_SIZE; ++size) {
    int random_number = std::rand() % 10000 - 5000;

    test_data.push_back(random_number);
    rsq.push_back(random_number);

    ASSERT_EQ(test_data.size(), rsq.size());

    for (int from = 0; from < rsq.size(); ++from) {
      for (int to = from + 1; to < rsq.size(); ++to) {
        ASSERT_EQ(std::accumulate(test_data.begin() + from,
                                  test_data.begin() + to,
                                  0),
                  rsq.range_sum(from, to));
      }
    }
  }

  do {
    test_data.pop_back();
    rsq.pop_back();

    ASSERT_EQ(test_data.size(), rsq.size());

    for (int from = 0; from < rsq.size(); ++from) {
      for (int to = from + 1; to < rsq.size(); ++to) {
        ASSERT_EQ(std::accumulate(test_data.begin() + from,
                                  test_data.begin() + to,
                                  0),
                  rsq.range_sum(from, to));
      }
    }
  } while (!test_data.empty());
}
示例#8
0
文件: file.c 项目: luisasilva/csc467
/*{
	vec3 a = vec3(1.0,0.0,0.0);
}*/

{
	vec4 fCol = gl_Color;
	vec4 fTex = gl_TexCoord;
	vec4 eyeNorm;
	vec4 coeff;
	vec4 shade;
	const vec4 lVec = env1; 
	const vec4 lHalf = gl_Light_Half; 
	const vec4 red = vec4(1.0,0.0,0.0,1.0);
	eyeNorm = fTex;
	eyeNorm[3] = dp3(eyeNorm,eyeNorm);
	eyeNorm[3] = rsq(eyeNorm[3]);
	eyeNorm = eyeNorm * eyeNorm[3];
	shade = gl_Light_Ambient * fCol;
	coeff[0] = dp3(lVec,eyeNorm);
	coeff[1] = dp3(lHalf,eyeNorm); 
	coeff[3] = gl_Material_Shininess[0];
	coeff = lit(coeff);
	shade = shade + coeff[1] * fCol;
	shade = shade + coeff[2] * fCol;
	gl_FragColor = shade;
}

/*
{
	vec4 temp;
	if (true){
 int sumRange(int i, int j) {
     return i == 0 ? rsq(j) : rsq(j) - rsq(i-1);
 }
 void set(int k,data_type v){
     data_type diff= v - rsq(k,k);
     adjust(k,diff);
 }
 data_type rsq(int a, int b){
     return rsq(b) - (a == 1 ? 0 : rsq(a - 1));
 }
 int rsq(int a, int b) { return rsq(b) - (a == 1 ? 0 : rsq(a - 1)); } // RSQ(a, b)