LIS全炸求助
查看原帖
LIS全炸求助
777131
IDNo1楼主2023/10/15 16:49
#include<bits/stdc++.h>
using namespace std;
int a[10005],b[10005],pos,pos2,x,dp[10005],it,l,r,mid,cnt;
int main(){
// 	freopen("1.txt","r",stdin); 
	while(cin>>x)
	{
		a[++pos]=x;
	}
	for(int i=pos;i>=1;i--)
	{
		if(dp[it]<=a[i])
		{
			dp[++it]=a[i];
		}
		else
		{
			l=0,r=it;
			while(l<r)
			{
				mid=(l+r)/2;
				if(dp[mid]>=a[i])r=mid;
				else l=mid+1;
			}
		}
	}
	cout<<it<<'\n';
	while(pos)
	{
		for(int i=1;i<=pos;i++)dp[i]=0;
		it=0;
		for(int i=pos;i>=1;i--)
		{
			if(dp[it]<=a[i])
			{
				dp[++it]=a[i];
			}
			else
			{
				l=0,r=it;
				while(l<r)
				{
					mid=(l+r)/2;
					if(dp[mid]>=a[i])r=mid;
					else l=mid+1;
				}
				dp[l]=min(dp[l],a[i]);
			}
		}
		for(int i=1;i<=it;i++)
		{
			for(int j=1;j<=pos;j++)
			{
				if(a[j]==dp[i])
				{
					a[j]=-1;
					break;
				}
			}
		}
		pos2=0;
		for(int i=1;i<=pos;i++)
		{
			if(a[i]!=-1)b[++pos2]=a[i];
		}
		pos=pos2;
		for(int i=1;i<=pos2;i++)
		{
			a[i]=b[i];
		}
		cnt++;
	}
	cout<<cnt;
	return 0;
}
2023/10/15 16:49
加载中...