https://ac.nowcoder.com/acm/contest/945/H
题目大致意思就是把数组相邻位置任意交换,直到所有位置按顺序排好,求交换次数,直接遍历肯定超时,这时就需要思考一下该怎么做,其实就是把原位置的下标记下来,之后sort排序后,用排完序的下标减去原来的在加1就ok了
直接上AC代码:
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
pair<int,int>x[100010];
int main(void)
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&x[i].first);
x[i].second=i;
}
int ans=0;
sort(x+1,x+n+1);
for(int i=1; i<=n; i++)
ans=max(ans,x[i].second-i + 1);
printf("%d",ans);
}