我二分总错,请问这道题第二问的二分怎么写?
查看原帖
我二分总错,请问这道题第二问的二分怎么写?
1340302
jijianxiangsu楼主2024/8/20 23:29

下面的是我写的第二问二分函数,

void f(int n){//n是当前要拦截的导弹高度
	cout<<n<<"\n";
	int l=1,r=s;
	int mid;
	while(l<=r){
		mid=(l+r)/2;
		
		//cout<<l<<" "<<mid<<" "<<r<<"\n";
		
		if(x[mid]>n) 	r=mid-1;
		else		l=mid+1;		
		
		//getchar();
	}
	x[mid]=n;//拦截系统高度数组更新
	if(mid==s) mx=n;//mx最大高度
}

求大佬解答,谢谢!

其他代码应该没有错,也附上吧 58分QWQ

#include<bits/stdc++.h>
using namespace std;

int p[100005];
int x[100005];

int s=0;//系统数
int mx=0;//最高可拦截的高度

int ss[100005];

void f(int n){
	cout<<n<<"\n";
	int l=1,r=s;
	int mid;
	while(l<=r){
		mid=(l+r)/2;
		
		cout<<l<<" "<<mid<<" "<<r<<"\n";
		
		if(x[mid]>n) 	r=mid-1;
		else			l=mid+1;		
		
		//getchar();
	}
	x[mid]=n;
	if(mid==s) mx=n;
}

int main(){	
	int sum=0;
	int n;
	while(cin>>n){ 
		sum++;
		p[sum]=n;		
	}
	//for(int i=1;i<=sum;i++)cout<<p[i]<<" ";
	//cout<<"\n";
	
//	int s=0;//系统数
//	int mx=0;//最高可拦截的高度
	
	for(int i=1;i<=sum;i++){
		if(mx<p[i]){
			s++;
			x[s]=p[i];
			mx=p[i];
		}	
		else{
			f(p[i]);
		}
		
		//cout<<p[i]<<" "<<s<<" "<<mx<<"\n";
		//for(int j=1;j<=s;j++)cout<<x[j]<<" ";
		//cout<<"\n";
	}
	
	
	ss[sum]=1;
	for(int i=sum-1;i>=1;i--){
		ss[i]=1;
		for(int j=i+1;j<=sum;j++){
			if(p[i]>=p[j])ss[i]=max(ss[i],ss[j]+1);
		}
	}
	//for(int i=1;i<=sum;i++)cout<<ss[i]<<" ";
	//cout<<"\n";	
	sort(ss+1,ss+1+sum);

	cout<<ss[sum]<<"\n";
	cout<<s<<"\n";
}
2024/8/20 23:29
加载中...