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)); }
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()); }
/*{ 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)