题目名称:
分块排序
题目描述:
小 b 有个长度为 n 的数组 a,其中的数字各不相同,她想将这个数组排序。
然而小 b 很懒,她觉得对整个数组排序太累了,因此她请你将 a 分成一些块,使得她只需要对每一块分别排序,就能将整个数组排序。
请问你最多能把 a 分成多少块。
样例解释:
将 a 分成 [1,0],[4,3,2] 两部分分别排序,可以让整个数组变得有序。但分成更多块则无法完成排序。
代码:
#include<bits/stdc++.h>//很容易懂的~~~我就不分析了
using namespace std;
#define int long long
int a[100000],b[100000];
int n;
int ans;
int maxx;
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
if(a[i]==b[i])
{
ans++;
}
else
{
maxx=-1000000;
for(int j=i;j<=n;j++)
{
maxx=max(maxx,b[j]);
if(maxx<=a[j])
{
i=j;
break;
}
}
ans++;
}
}
cout<<ans;
return 0;
}