D. Sequence and Swaps_贪心排序思维


D. Sequence and Swaps_贪心排序思维

题目大意

给一个序列,问是否有可能通过一系列操作使得该序列有序。每次操作可以使得满足选择任意的i满足ai大于x,然后swap(ai,x)。问最小操作次数。

思路和代码

考虑如下样例:

x=1
a={3,2,4,4,5,2}

因为最后要有序,所以每次贪心的把大数换掉即可

int solve2(){
	int n , m ;
	cin >> n >> m ;
	vct a(n + 1 , 0) ;
	rep(i , 1 , n) cin >> a[i] ;
	if(is_sorted(a.begin() + 1 , a.end())) return 0 ;
	
	int ans = 0 ;
	
	rep(i , 1 , n){
		if(a[i] > m) swap(a[i] , m) , ans ++ ;
		if(is_sorted(a.begin() + 1 , a.end())) break ;
	}
	if(is_sorted(a.begin() + 1 , a.end())) return ans ;
	return -1 ;
}