归并,为啥全T了
  • 板块P1908 逆序对
  • 楼主zyh1145
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/17 12:32
  • 上次更新2024/7/17 12:45:03
查看原帖
归并,为啥全T了
1029978
zyh1145楼主2024/7/17 12:32

样例过了,代码正确性应该是对的但是就是超时

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
typedef long long ll;
int n,a[N],t[N];
long long s;
void mergesort(int l,int r)
{
	if (l == r) return ;
	int mid = (l + r) / 2;
	mergesort(1,mid);
	mergesort(mid+1,r);
	int i = l,j = mid+1,p = l;
	while (i <= mid && j <= r)
	{
		if (a[i] > a[j])
		{
			s += mid - i + 1;
			t[p] = a[j];
			p++;
			j++;
		}
		else
		{
			t[p] = a[i];
			p++;
			i++;
		}
	}
	while (i <= mid)
	{
		t[p] = a[i];
		p++;
		i++;
	}
	while (j <= r)
	{
		t[p] = a[j];
		p++;
		j++;
	}
	for (int i = l;i <= r;i++)
	{
		a[i] = t[i];
	}
}
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
inline void write(int x)
{
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
    return;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	n = read();
	for (int i = 1;i <= n;i++)
	{
		a[i] = read();
	}
	mergesort(1,n);
	write(s);
	return 0;
 } 
2024/7/17 12:32
加载中...