vector 全RE 求助
查看原帖
vector 全RE 求助
796838
Zak_chen楼主2023/7/30 21:29

rt 悬关

#include<bits/stdc++.h>
#define lwb(x) lower_bound(v.begin(),v.end(),x)
#define upb(x) upper_bound(v.begin(),v.end(),x)
using namespace std;
vector<int>v;
int n;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int opt,x;scanf("%d%d",&opt,&x);
		if(opt==1)
		{
			if(v.size()!=0)
			{
				if(v[lwb(x)-v.begin()]==x) printf("Already Exist\n");
				else v.insert(lwb(x),x);
			}
			else v.insert(lwb(x),x);
		}
		else //在以下部分RE 
		{
			if(v.size()==0)
			{
				printf("Empty\n");
			}
			else if(v[lwb(x)-v.begin()]==x)
			{
				v.erase(lwb(x));
				printf("%d\n",x);
			}
			else
			{
				if(lwb(x)==v.begin())
				{
					printf("%d\n",v[0]);
					v.erase(lwb(x));
				}
				else if(lwb(x)==v.end())
				{
					printf("%d\n",v[v.size()-1]);
					v.erase(lwb(x));
				}
				else
				{
					int val1 = v[lwb(x)-v.begin()];//后继 
					int val2 = v[lwb(x)-v.begin()-1];//前驱 
					if(abs(val1-x)>abs(val2-x) || abs(val1-x)==abs(val2-x))
					{
						printf("%d\n",val2);
						v.erase(lower_bound(v.begin(),v.end(),val2));
					}
					else if(abs(val1-x)<abs(val2-x))
					{
						printf("%d\n",val1);
						v.erase(lower_bound(v.begin(),v.end(),val1));
					}
				}
			}
/*			if(v.size() == 0) cout<<"Empty"<<endl; 
			else
			{
				int w = 0x7f7f7f7f,num,t;
				for(int i = 0;i < v.size();i++)
				{
					if(abs(x - v[i]) < w) w = abs(x - v[i]),num = v[i],t = i;//最接近的答案 
					if(abs(x - v[i]) == w && v[i] < num) num = v[i],t = i;//较短的木材 
				}
				v.erase(v.begin() + t);
				cout<<num<<endl;
			}*/
		}
	}	
	return 0;
}
2023/7/30 21:29
加载中...