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 int
long long int sum = 0; // sum 也应该是 long long int
//定义两个数组,储存第i位置左侧max以及右侧max
for(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]);
//计算左侧的max
for(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)`
标签:int,max,sum,cin,long,--,雨水
From: https://www.cnblogs.com/yue-mikasa/p/18538321