求调 为什么升序可以A 但降序不能
查看原帖
求调 为什么升序可以A 但降序不能
1121087
czy032321054楼主2024/7/31 17:43

降序代码,样例都过不了:

#include<bits/stdc++.h>
using namespace std;
int a[500005],n;
long long ans;
bool cmp(int x,int y){
	return x>y;
}
void mt(int l,int r){
	if(l>=r)return;
	int mid=(l+r)>>1;
	mt(l,mid);
	mt(mid+1,r);
	sort(a+l,a+mid+1,cmp);
	sort(a+mid+1,a+r+1,cmp);
	int i=l,j=mid+1;
	while(i<=mid&&j<=r)
    	if(a[i]>a[j])
    		i++;
    	else
    		j++,ans+=i-l;//统计答案	
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	mt(0,n-1);
	cout<<ans;
}

升序代码 已A:

#include<bits/stdc++.h>
using namespace std;
int a[500005],n;
long long ans;
void mt(int l,int r){
	if(l>=r)return;
	int mid=(l+r)>>1;
	mt(l,mid);
	mt(mid+1,r);
	sort(a+l,a+mid+1,);
	sort(a+mid+1,a+r+1);
	int i=l,j=mid+1;
	while(i<=mid&&j<=r)
    	if(a[i]<=a[j])
    		i++;
    	else
    		j++,ans+=mid-i+1;//统计答案	
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	mt(0,n-1);
	cout<<ans;
}
2024/7/31 17:43
加载中...