自己写的二分,样例过了,自己也试过了,还是0分
查看原帖
自己写的二分,样例过了,自己也试过了,还是0分
209561
FCB_1899楼主2021/1/21 10:22
#include<iostream>
#include<algorithm>
using namespace std;

#define err 2147483647

int s[10010]={0};
int e=1;

void op(short t)
{
	if(t==1)
	{
		int x;
		cin>>x;
		int l=1,r=e;
		while(l<=r)
		{
			int mid=(l+r) >> 1;
			if(s[mid]<x) l=mid;
			if(s[mid]>x) r=mid;
			else
			{
				l=mid;
				break;
			}
		}
		cout<<l<<endl;
		return ;
	}
	if(t==2)
	{
		int x;
		cin>>x;
		cout<<s[x]<<endl;
		return ;
	}
	if(t==3)
	{
		int x;
		cin>>x;
		int l=1,r=e;
		if(binary_search(s,s+e,x)==0)
		{
			cout<<-err<<endl;
			return ;
		}
		while(l<=r)
		{
			int mid=(l+r) >> 1;
			if(s[mid]<x) l=mid;
			if(s[mid]>x) r=mid;
			else
			{
				l=mid;
				break;
			}
		}
		if(l==1) cout<<-err<<endl;
		else cout<<s[l-1]<<endl;
		return ;
	}
	if(t==4)
	{
		int x;
		cin>>x;
		int l=1,r=e;
		if(binary_search(s,s+e,x)==0)
		{
			cout<<err<<endl;
			return ;
		}
		while(l<=r)
		{
			int mid=(l+r) >> 1;
			if(s[mid]<x) l=mid;
			if(s[mid]>x) r=mid;
			else
			{
				l=mid;
				break;
			}
		}
		if(l==e) cout<<err<<endl;
		else cout<<s[l+1]<<endl;
		return ;
	}
	if(t==5)
	{
		int x;
		cin>>x;
		int ps=lower_bound(s,s+e,x)-s;
		for(int i=ps;i<=e;i++)
			s[i+1]=s[i];
		s[ps]=x;
		e++;
//		for(int i=1;i<=e;i++) cout<<s[i]<<' ';
//		cout<<endl;
		return ;
	}
}

int main()
{
	int q;
	cin>>q;
	while(q--)
	{
		short n;
		cin>>n;
		op(n);
	}
	return 0;
}

求助!!!!!!

2021/1/21 10:22
加载中...