CF1901B题解
zhangshuhang2011 · · 题解
思路
注意到题目实质上就是在求在一个全
注意到我们可以把数组变成柱状图并“切片”,有几片答案就是几,而片数很好统计:每当数组元素增加时都会产生一个或几个“切片”的左端,增加几就是几个“切片”。以下就是代码实现:
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, a[200005], ans;
void solve(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
a[0] = 0; ans = 0;
for(int i = 1; i <= n; i++){
if(a[i] > a[i-1]){
ans += a[i] - a[i-1];
}
}
cout << ans-1 << endl;
}
signed main(){
int t;
cin >> t;
while(t--) solve();
return 0;
}
注意事项:
- 不开
long long见祖宗:n 最大是2 \times 10^5 ,c_i 最大是10^9 ,答案最大可以达到10^{14} 的数量级,会爆int。