C - Grand Garden
Time Limit: 2 sec / Memory Limit: 1024 MB
Score : 300300 points
Problem Statement
In a flower bed, there are NN flowers, numbered 1,2,......,N1,2,......,N. Initially, the heights of all flowers are 00. You are given a sequence h={h1,h2,h3,......}h={h1,h2,h3,......}as input. You would like to change the height of Flower kk to hkhk for all kk (1≤k≤N)(1≤k≤N), by repeating the following "watering" operation:
- Specify integers ll and rr. Increase the height of Flower xx by 11 for all xx such that l≤x≤rl≤x≤r.
Find the minimum number of watering operations required to satisfy the condition.
Constraints
- 1≤N≤1001≤N≤100
- 0≤hi≤1000≤hi≤100
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
NN h1h1 h2h2 h3h3 ............ hNhN
Output
Print the minimum number of watering operations required to satisfy the condition.
Sample Input 1 Copy
Copy
4 1 2 2 1
Sample Output 1 Copy
Copy
2
The minimum number of watering operations required is 22. One way to achieve it is:
- Perform the operation with (l,r)=(1,3)(l,r)=(1,3).
- Perform the operation with (l,r)=(2,4)(l,r)=(2,4).
Sample Input 2 Copy
Copy
5 3 1 2 3 1
Sample Output 2 Copy
Copy
5
Sample Input 3 Copy
Copy
8 4 23 75 0 23 96 50 100
Sample Output 3 Copy
Copy
221
同学代码:
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll MAXN = 1e5+200;
int main(){
ll a[MAXN] = {0};
ll n;
cin>>n;
for(ll i = 0; i < n; i++){
cin>>a[i];
}
ll k = a[0];
ll sum = 0;
for(int i= 0; i < n; i++){
if(i == n -1){
if(a[i] >= k){
k = a[i];
}
sum+=k;
}else{
if(a[i] >= k){
k = a[i];
}else{
sum += k - a[i];
k = a[i];
}
}
}
cout<<sum<<endl;
return 0;
}