题解:CF599C Day at the Beach
题目传送门
题意
有
- 将城堡被分成若干个块,每块包含连续的城堡,一个块里可以只有一个城堡,每一个城堡都在某一个分块中。
- 每个块独立排序,使得
h_i,h_{i+1},\dots,h_j 有序。 - 分块方式应保证所有的块内部排序后,整个序列
h_i 也变得有序。
你的任务是确定满足上述要求最多可以将城堡分成多少个块。
思路
我们输入时,设原输入未排序的高度为一个数组
注意事项
如果数组
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5;
ll h[maxn],nh[maxn],x,sum,ans,i,j,n,c;
signed main()
{
scanf("%lld",&n);
for(i=1;i<=n;++i)
{
scanf("%lld",&x);
nh[i]=h[i]=x;
}
sort(nh+1,nh+1+n);
for(i=1;i<=n;i++)
{
c=h[i]-nh[i];
if(sum+c==0)ans++;
sum+=c;
}
cout<<ans<<endl;
return 0;
}