这里提供一种分治做法,65pts
查看原帖
这里提供一种分治做法,65pts
1084316
mayaoyuan181107楼主2025/7/2 19:08

wa第一个点,后面tle了,求大佬解答

#include <bits/stdc++.h>
#define N 100005
#define int long long
using namespace std;
int n;
struct T{
	int x,id;
}a[N];
int cha(int j,int k){
	return abs(j-k);
}
T fz(int l,int r,int k){
	if(r-l+1==2){
		if(cha(a[l].x,k)==cha(a[r].x,k)){
			return a[l].id<a[r].id?a[l]:a[r];
		}
		return cha(a[l].x,k)<cha(a[r].x,k)?a[l]:a[r];
	}
	if(r-l+1==1)return a[l];
	T s=fz(l,(l+r)/2,k);
	T t=fz((l+r)/2+1,r,k);
	if(cha(s.x,k)==cha(t.x,k)){
		return s.id<t.id?s:t;
	}
	return cha(s.x,k)<cha(t.x,k)?s:t;
	
}
signed main(){
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i].x;
		a[i].id=i;
	}
	cout << abs(a[2].x-a[1].x) << " " << 1 <<endl;
	for(int i=3;i<=n;i++){
		T y=fz(1,i-1,a[i].x);
		cout << abs(y.x-a[i].x) << " " << y.id << endl;
	}
	return 0;
}
/*
5
-5 4 -3 -2 1
*/
2025/7/2 19:08
加载中...