奇怪的问题
查看原帖
奇怪的问题
1009402
QWQAWAQWQAWA楼主2024/10/3 11:08
#include <bits/stdc++.h>
using namespace std;
long long L; 
set<long long>o;
int main()
{
	cin>>L;
	while(L--){
		long long op,l;
		cin>>op>>l;
		if(op==1){
			
			if(o.find(l)!=o.end()){
				cout<<"Already Exist"<<endl;
			}
			else
			o.insert(l);
		}
		else{
			if(o.empty()) {
				cout<<"Empty"<<endl;
				continue;
			}
			if(o.find(l)!=o.end()){
				o.erase(l);
				cout<<l<<endl;
				continue;
			}
			auto q=o.upper_bound(l);
			q--;
			auto v=q;
			q++;
			long long numq=*q;
			long long numv=*v;
			auto st=o.begin();
			if(q==st){
				long long k=*st;
				cout<<k<<endl;
				o.erase(k);
				continue;
			}
			auto en=o.end();
			
	        	if(q==en){
				en--;
				long long k=*en;
				cout<<k<<endl;
				o.erase(k);
				continue;
			}
			

			if(numq-l<l-numv){//cout<<"!";+
				cout<<numq<<endl;
				o.erase(numq);
			}
			else{//cout<<"q"<<numq<<"v"<<numv;
				cout<<numv<<endl;
				o.erase(numv);
			}
		}
	}




	return 0;
}

这个都WA了 当我们先特判,再赋值

#include <bits/stdc++.h>
using namespace std;
long long L; 
set<long long>o;
int main()
{
	cin>>L; 
	while(L--){
		long long op,l;
		cin>>op>>l;
		if(op==1){
			
			if(o.find(l)!=o.end()){
				cout<<"Already Exist"<<endl;
			}
			else
			o.insert(l);
		}
		else{
			if(o.empty()) {
				cout<<"Empty"<<endl;
				continue;
			}
			if(o.find(l)!=o.end()){
				o.erase(l);
				cout<<l<<endl;
				continue;
			}
			auto q=o.upper_bound(l);
			auto st=o.begin();			
			if(q==st){
				long long k=*st;
				cout<<k<<endl;
				o.erase(k);
				continue;
			}
			auto en=o.end();
			
	        	if(q==en){
				en--;
				long long k=*en;
				cout<<k<<endl;
				o.erase(k);
				continue;
			}
			q--;
			auto v=q;
			q++;
			long long numq=*q;
			long long numv=*v;
			

			

			if(numq-l<l-numv){//cout<<"!";+
				cout<<numq<<endl;
				o.erase(numq);
			}
			else{//cout<<"q"<<numq<<"v"<<numv;
				cout<<numv<<endl;
				o.erase(numv);
			}
		}
	}




	return 0;
}

AC了 赋值没改变q 这就很奇怪

2024/10/3 11:08
加载中...