二分为啥还是0分
查看原帖
二分为啥还是0分
1297880
nuistcaicai楼主2024/5/22 09:44
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+2;
int w[N];
int dp[N],total;
signed main()
{
	int t=0;
	while(true)
	{
		cin>>w[++t];
		char ch=getchar();
		if(ch=='\n')break;
	}
	dp[0]=99999;	
	for(int i=1;i<=t;i++)
	{
		if(dp[total]>=w[i])
		{
			dp[++total]=w[i];
		}
		else
		{
			int l=0,r=total+1;
			while(l+1<r)
			{
				int mid=(l+r)/2;
				if(dp[mid]>w[i])
				{
					l=mid;
				}
				else
				r=mid;
			}
			if(r!=0)dp[r]=w[i];
		}
	}
	cout<<total<<endl;
	total=0;
	memset(dp,0,sizeof dp);
	for(int i=1;i<=t;i++)
	{
		if(dp[total]<w[i])
		{
			dp[++total]=w[i];
		}
		else
		{
			int l=0,r=total+1;
			while(l+1<r)
			{
				int mid=(l+r)/2;
				if(dp[mid]<w[i])
				{
					l=mid;
				}
				else
				r=mid;
			}
			dp[r]=w[i];
		}
	}
	cout<<total<<endl;
	return 0;
} 
2024/5/22 09:44
加载中...