Out of Sorts
题面描述:
对于给出的数据若是冒泡排序一次,便会打印“moo”。
求会打印几次“moo”。
题目分析:
思维题,
根据冒泡排序的原理:每次找一个最大的数放到后面,其他的数被动前移或不变。
例如:
0 2 9 3 8 5 4 7
冒泡一次变成0 2 3 8 5 4 7 9(此时 3 6 5 4 7 各向前移动了一位)
冒泡两次变成0 2 3 5 4 7 8 9(此时 5 4 7 各向前移动了一位)
冒泡三次变成0 2 3 4 5 7 8 9(此时 4 向前移动了一位)
观察可以发现冒泡排序的次数就是向前移动的最大位数 ,
而“moo”的次数是 3+1=4 次,即是答案。
代码:
#include<algorithm>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<vector>
using namespace std;
long long ans=-1,i,n;
struct num{
long long num,pos;
}a[100005];
bool cmp(num a,num b){
if(a.num!=b.num) return a.num<b.num;
else return a.pos<b.pos;
}
int main(){
cin>>n;
for(i=1;i<=n;i++) cin>>a[i].num,a[i].pos=i;
sort(a+1,a+1+n,cmp);
for(i=1;i<=n;i++) ans=max(ans,a[i].pos-i+1);
cout<<ans;
}