求助,不知哪里有误!
查看原帖
求助,不知哪里有误!
243345
return20071007楼主2023/12/17 21:27
#include<bits/stdc++.h>
using namespace std;
int a[100001], fro[100001], orf[100001];
int n=1, i, ans=1, ans2=1;
int se(int x){
	int start;
	int end;
	int mid;
	int p;
	start=1;
	end=ans;
	while(start<=end){
		mid=start+((end-start)>>1);
		if(fro[mid]>x){
			start=mid+1;
		}
		else{
			end=mid-1;
			p=mid;
		}
	}
	return p;
}
int se2(int x){
	int start2;
	int end2;
	int mid2;
	int p2;
	start2=1;
	end2=ans2;
	while(start2<=end2){
		mid2=start2+((end2-start2)>>1);
		if(orf[mid2]<=x){
			start2=mid2+1;
		}
		else{
			p2=mid2;
			end2=mid2-1;
		}
	}
	return p2;
}
int main(){
	memset(fro,0,sizeof(fro));
	memset(orf,0,sizeof(orf));
	while(cin>>a[n]){
		n++;
	}
	n--;
	fro[1]=a[1];
	orf[1]=a[1];
	for(i=2; i<=n; i++){
		if(a[i]<=fro[ans]){
			ans++;
			fro[ans]=a[i];
		}
		else{
			fro[se(a[i])]=a[i];
		}
		if(a[i]>orf[ans2]){
			ans2++;
			orf[ans2]=a[i];
		}
		else{
			orf[se2(a[i])]=a[i];
		}
	}
	cout<<ans<<endl<<ans2;
	return 0;
}
/*这里一试到第二问就是个driworth反链定理
然后新的一发是想让你优化,其实优化就是之前做过的,LIS有一个比较快捷的方法就是说
我们不断去找什么时候能替换*/ 
2023/12/17 21:27
加载中...