草体にぼ日記

だらだらと

ABC116C Grand Garden

C - Grand Garden
提出AC
Submission #8507430 - AtCoder Beginner Contest 116

int main()
{
	cout <<setprecision(10);
	ll n ; cin >> n ;
	vector<int> a(n);
	rep(i,n) cin >> a[i];
	
	int active = 0 ;
	int ans = 0;
	rep(i,n){
		if(active < a[i]){
			ans += a[i] - active;
			active = a[i];
		}
		else if(active > a[i]){
			active = a[i];
		}
	}
	cout << ans << endl;
}

解説AC
・解法
解説を見ると良い
active って変数を用意するんですけど、
これよりもa[i](花の高さ)
が大きいんだったら、a[i] - activeを足すんだけど、
これが active よりもa[i]が高いときか、a[i]よりもactiveが高いときか分からなくなる

active = 0 スタートで 花の高さ2 だけがあるときを考えると楽で、
2 - 0 で2が答えになるから
a[i] - active を足せばいいと分かる

なんだこれ。うまく解法書けない