コンテストの違いをブロックする

コンテストの違いをブロックする

問題解決のアイデア:逆思考:各ビルディングブロックの高さが与えられていると仮定すると、特定の間隔内のすべての高さを毎回1ずつ減らすことができ、すべての高さを0にするための最小操作回数を求めることができます。
差分シーケンスb [1]、b [2]、...、b [n]を取得し、後ろから前にスキャンして正の数に遭遇します。これは、連続区間の左臨界に現在到達していることを示します。間隔の右マージンを示すには、整数の後の負の数でなければなりません。整数プラス1、負の数マイナス1、差分シーケンスが0になるまで

操作の数は、差分シーケンスの整数の合計です。

#include<iostream>
using namespace std;
#include<queue>

int n;

int sum;

int h[100005];
int b[100005];

int main()
{
    
    
	cin>>n;
	
	for(int i=1;i<=n;i++)
	{
    
    
		scanf("%d",&h[i]);
		
		b[i]=h[i]-h[i-1];
//		cout<<b[i]<<" ";
		if(b[i]>0)
			sum=sum+b[i];		
	}
	
	cout<<sum;
	
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_45448563/article/details/113810932
おすすめ