蒟蒻本人亲测发现有些测试点因为输出逆序对的顺序不同而 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;
}