请求开起 SPJ(违规紫衫)
查看原帖
请求开起 SPJ(违规紫衫)
623254
Soul_direction楼主2023/8/18 16:29

蒟蒻本人亲测发现有些测试点因为输出逆序对的顺序不同而 WA,请求开起 SPJ。

另附:

1.蒟蒻我发现 3 个样例的输出数据皆有问题,用题解里的 AC 代码测了一下,发现输出对不上,求改。

2.附上蒟蒻的 WA 代码:

#include <iostream>
#include <algorithm>
#include <string>
#define maxn 10010
#define inf 2147483647
using namespace std;
int n,a[maxn],b[maxn],f[maxn][2],cnt;
int ans=0;
void merge_sort(int l,int r){
    if(l==r)return ;
    int mid=(l+r)>>1;
    merge_sort(l,mid);
	merge_sort(mid+1,r);
    int i=l,j=mid+1,k=l;
    while(i<=mid&&j<=r){
    	if(a[i]<=a[j])b[k++]=a[i++];
		else{
			b[k++]=a[j++];
			ans+=(long long)mid-i+1;
			f[++cnt][0]=i;
			f[cnt][1]=j-1;
		}
	}
    while(i<=mid)b[k++]=a[i++];
    while(j<=r)b[k++]=a[j++];
    for(int i=l;i<=r;i++)a[i]=b[i];
}
inline int read(){
    int x=0,f; char ch=0;
    while(!isdigit(ch)) f=(ch=='-'?-1:1),ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return x*f;
}
inline void print(int x){
    if(x<0) x=-x,putchar('-');
    if(x>9) print(x/10);
    putchar(x%10+48);
}
inline void write(int x){print(x);putchar(' ');}
signed main(){
	n=read();
    for(int i=1;i<=n;i++)a[i]=read();
    merge_sort(1,n);
    for(int i=cnt;i>=1;i--){
    	write(f[i][0]);
    	write(f[i][1]);
    	putchar('\n');
	}
    return 0;
}
2023/8/18 16:29
加载中...