蒟蒻求助,P1774(所有点爆空间)
查看原帖
蒟蒻求助,P1774(所有点爆空间)
260644
傻狗凉楼主2021/2/2 21:19
#include <bits/stdc++.h>
using namespace std;
int n,ans;
int num[500005],s[500005];
int twofen(int left,int right,int n)
{
	if(n==s[(left+right)/2]) return (left+right)/2;
	if(n==s[left]) return left;
	if(n==s[right]) return right;
	if(n>s[(left+right)/2]) twofen((left+right)/2,((left+right)/2+right)/2,n);
	if(n<s[(left+right)/2]) twofen(left,(left+right)/2,n);
}
int main(){
	cin>>n;
	for(int i=0;i<n;++i)
	{
		cin>>num[i];
		s[i]=num[i];
	}
	sort(s,s+n);
	for(int i=0;i<n;++i)
	{
		if(num[i]==s[i]) continue;
		swap(num[i],num[twofen(0,n-1,num[i])]);
		++ans;
	}
	cout<<ans<<endl;
	return 0;
}
2021/2/2 21:19
加载中...