vector过样例,但全RE,最好能提示如何修改,谢谢佬
查看原帖
vector过样例,但全RE,最好能提示如何修改,谢谢佬
1280499
zhengyiyu楼主2024/2/25 14:29
#include<bits/stdc++.h>
using namespace std;

vector<long long> v;

//二分查找 
int mid_find(long long a){
	int l = 0, r = v.size() - 1, mid;
	while(l < r){
		mid = (l + r) / 2;
		if (a <= v[mid])
			r = mid;
		else
			l = mid + 1;
	}
	return l;
}

int main(){
	int n, func, pos;
	long long x;
	cin >> n;
	for (int i = 0; i < n; i++){
		cin >> func >> x;
		pos = mid_find(x);//二分查找得大概位置
//		每次操作后输出v[i] 
//		for(int i = 0; i < v.size(); i++)
//			cout << " v["<<i<<"] = "<<v[i];
//		cout << endl;
//		cout << "pos:"<<pos<<endl;
		switch(func){	
			case 1:	//加仓 
				if (v.empty() == 1){ //空仓需特殊判断 
					v.push_back(x);
				}
				else if (v[pos] != x){ //判断比v[pos]大还是小,插其前或后(用sort时间复杂度大) 
					v[pos] > x ? v.insert(v.begin() + pos, x) : v.insert(v.begin() + pos + 1, x);
				}
				else
					cout << "Already Exist" << endl;
				break;
			case 2:	//出仓 
				if (v.empty() == 0){ //不空则判断哪根长度更接近 
					if (abs(v[pos-1] - x) <= abs(v[pos] - x)){
						cout << v[pos-1] << endl;
						v.erase(v.begin() + pos -1);
						//v.erase(find(v.begin(),v.end(),v[pos-1]));
					}
					else{
						cout << v[pos] << endl;
						v.erase(v.begin() + pos);
						//v.erase(find(v.begin(),v.end(),v[pos]));
					}
				}
				else
					cout << "Empty" << endl;
				break;
 		}
	}
	return 0;
}
2024/2/25 14:29
加载中...