玄关 WA 152pts求助
查看原帖
玄关 WA 152pts求助
881733
AZYDLL楼主2024/3/8 13:32

测评记录

用的两次二分的解法,测试点下载下来自测没问题,机房里一大佬用Linux测也没问题,但交上去就是WA

求路过 dalao debug

我的代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 100005

using namespace std;

string in;
int n,num[MAXN],dp1[MAXN],ans1,dp2[MAXN],ans2;

void getNum()
{
	getline(cin,in);
	int len=in.size(),pt=0;
	while(pt<len){
		int ans=0;
		char ch=in[pt];
		while(pt<len && (ch<'0' || ch>'9')) ch=in[++pt];
		while(pt<len && (ch>='0' && ch<='9')) ans=ans*10+ch-'0',ch=in[++pt];
		num[++n]=ans;
	}
	
	return ;
}

int find1(int myNum)
{
	int l=1,r=ans1;
	while(l<=r){
		int mid=l+(r-l)/2;
		if(dp1[mid]==myNum) return mid;
		else if(myNum>dp1[mid]) r=mid-1;
		else l=mid+1;
	}
	return r;
}
int find2(int myHih)
{
	int l=1,r=ans2;
	while(l<=r){
		int mid=l+(r-l)/2;
		if(dp2[mid]==myHih) return mid;
		else if(myHih<dp2[mid]) r=mid-1;
		else l=mid+1;
	}
	return l;
}

int main()
{
	getNum();
	
	for(int i=1;i<=n;i++){
		int pt=find1(num[i]);
		dp1[pt+1]=num[i];
		ans1=max(ans1,pt+1);
	}
	for(int i=1;i<=n;i++){
		int pt=find2(num[i]);
		dp2[pt]=num[i];
		ans2=max(ans2,pt);
	}
	cout<<ans1<<"\n"<<ans2<<endl;
	
	return 0;
}
2024/3/8 13:32
加载中...