#include<bits/stdc++.h>\n#include<cmath>\nusing namespace std;\n\n/*\n以下是对代码的优化建议:\n\n1. 避免使用全局变量:尽量避免使用全局变量,因为全局变量会增加代码的复杂性和不可预测性。可以将变量 a、b、dnm、fa、fb 声明在 main 函数内部。\n\n2. 使用位运算代替求余操作:在判断 a[i] 是否为偶数时,可以使用位运算代替求余操作。可以将 if (a[i] % 2 == 0) 改为 if ((a[i] & 1) == 0)。\n\n3. 使用前缀和优化求和操作:在每次计算 dnm 时,可以使用前缀和优化求和操作。可以先计算出 b 数组的前缀和数组 sum,然后通过 sum[fb] - sum[fa-1] 来计算区间内的偶数个数。\n\n4. 将代码拆分成多个函数:将代码拆分成多个函数可以提高代码的可读性和可维护性。可以将计算前缀和的操作封装成一个单独的函数。\n*/\n\n#include<bits/stdc++.h>\n#include<cmath>\nusing namespace std;\n\nvoid calculatePrefixSum(int n, int a[], int b[], int sum[]) {\n sum[0] = 0;\n for (int i = 1; i <= n; i++) {\n sum[i] = sum[i-1] + b[i];\n }\n}\n\nint main(){\n int n, m;\n cin >> n >> m;\n \n int a[n+1], b[n+1];\n for (int i = 1; i <= n; i++){\n cin >> a[i];\n b[i] = (a[i] & 1) == 0 ? 1 : 0;\n }\n \n int fa, fb;\n int dnm = 0;\n int sum[n+1];\n calculatePrefixSum(n, a, b, sum);\n \n for (int i = 1; i <= m; i++){\n cin >> fa >> fb;\n dnm = sum[fb] - sum[fa-1];\n cout << dnm << endl;\n }\n \n return 0;\n}\n


原文地址: https://www.cveoy.top/t/topic/pLSQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录