正常输出,却显示Too short on line one?
  • 板块P1908 逆序对
  • 楼主lyxleo
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/2/10 23:23
  • 上次更新2023/11/5 03:25:03
查看原帖
正常输出,却显示Too short on line one?
255762
lyxleo楼主2021/2/10 23:23

求各位看看为什么输出出了问题,本地正常输出,测试没有输出。

#include <bits/stdc++.h>
#define array_N 100005
using namespace std;

long long n;
long long a[array_N];
long long t[array_N];
long long ans;

inline long long read(){
	register long long w = 0,flag = 1;register char c = getchar();
	while(c < 48 || c > 57){if(c == '-')flag = -1;c = getchar();}
	while(c >= 48 && c <= 57) w = (w<<3) + (w<<1) + (c^48),c = getchar();
	return flag*w;
}
inline long long print(long long x){
	if(x < 0) putchar(45),x = -x;
	if(x > 9) print(x/10);
	putchar((x%10) + 48);
}

inline void function(long long l,long long r){
	if(r - l < 1){
		return;
	}
	long long mid = (l + r)/2;
	function(l,mid);
	function(mid+1,r);
	int point1 = l,point2 = mid+1,point3 = 0;
	while(point1 <= mid && point2 <= r){
		if(a[point1] <= a[point2]){
			t[point3] = a[point1];
			++point1,++point3;
		}
		if(a[point1] > a[point2]){
			t[point3] = a[point2];
			++point2,++point3;
			ans += mid - point1 + 1;
		}
	}
	while(point1 <= mid){
		t[point3++] = a[point1++];
	}
	while(point2 <= r){
		t[point3++] = a[point2++];
	}
	for(int i=l,j = 0;i<=r;++i,++j){
		a[i] = t[j];
	}
	return;
}

int main(){
	n = read();
	for(register long long i=0;i<n;++i){
		a[i] = read();
	}
	function(0,n-1);
//	for(int i=0;i<n;++i){
//		printf("%d ",a[i]);
//	}
	print(ans);
}
2021/2/10 23:23
加载中...