vec+二分查找 60分
查看原帖
vec+二分查找 60分
288506
OutsideR_楼主2024/5/17 11:19

RT,不知道bug在哪,悬关

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
long long n,ai,c1,c2;
vector<pair<long long,long long> > a;
bool cmd(pair<long long,long long> t1,pair<long long,long long> t2){
	if(t1.first==t2.first){
		return t1.second<t2.second;
	}
	return t1.first<=t2.first;
}
long long _abs(long long x){
	if(x<0)return -x;
	return x;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	a.push_back(make_pair(-1000000009,10000009));
	a.push_back(make_pair(1000000009,10000009));
	for(register int i=1;i<=n;i++){
		cin>>ai;
		int it=upper_bound(a.begin(),a.end(),make_pair(ai,0),cmd)-a.begin();
		c1=_abs(a[it].first-ai);
		c2=_abs(a[it-1].first-ai);
		if(i==1){
			a.insert(upper_bound(a.begin(),a.end(),make_pair(ai,0),cmd),make_pair(ai,i));
			continue;
		}
		if(c1<c2){
			cout<<c1<<' '<<a[it].second<<'\n';
		}		
		else if(c1==c2){
			cout<<c1<<' '<<min(a[it].second,a[it-1].second)<<'\n';
		}
		else if(c1>c2){
			cout<<c2<<' '<<a[it-1].second<<'\n';
		}
		if(a[it].first!=ai && a[it-1].first!=ai){
			a.insert(upper_bound(a.begin(),a.end(),make_pair(ai,i),cmd),make_pair(ai,i));
		}
	}
	return 0;
}
2024/5/17 11:19
加载中...