using namespace std;
//锻炼思维的题目。
int main(){ int t;cin>>t;while(t--){long long int n; // 使用 long long int 来处理可能的大数cin>>n;vector<long long int> a(n), l(n), r(n); // 同样,数组元素也应该是 long long intlong long int sum = 0; // sum 也应该是 long long int//定义两个数组,储存第i位置左侧max以及右侧maxfor(long long int i=0; i<n; i++)cin>>a[i];l[0] = a[0];r[n-1] = a[n-1];for(long long int i=1; i<n; i++)l[i] = max(a[i], l[i-1]);//计算左侧的maxfor(long long int i=n-2; i>=0; i--)r[i] = max(a[i], r[i+1]);for(long long int i=0; i<n; i++){//由两侧最大中的最小决定。if(((min(l[i], r[i]) - a[i]))>=0)sum += (min(l[i], r[i]) - a[i]);}cout << sum << "\n"; }return 0;
}`````
易错1.思维思考不全面,及左右两侧最大值的求法。
2.数据类型不够,如果是int
3.` ``sum += (min(l[i], r[i]) - a[i]);
运用 long long int 数据类型写成sum += max(min(l[i], r[i]) - a[i], 0);```是不对的。
存在编译错误。
``error: no matching function for call to 'max(long long int, int)`