40分,其他TLE,求调!
查看原帖
40分,其他TLE,求调!
768144
_Trangle_楼主2022/9/18 12:01

求各位大佬帮帮我吧!

#include<stdio.h>
using namespace std;
unsigned h[50001],f[50001],d[50001],n,ans1=0,ans2=0,i,j,wh,nowh;
void max(unsigned &a,unsigned b){
	a=a>b?a:b;
}

int main(){
	for(n=1;scanf("%d",h+n)!=EOF;n++);
	n--;
	for(i=1;i<=n;f[i++]++)
		for(j=1;j<i;j++)
			if(h[j]>=h[i]) max(f[i],f[j]);
	for(i=1;i<=n;i++) max(ans1,f[i]);
	for(i=1;i<=n;i++){
		wh=0;nowh=2000000000;
		for(j=1;j<=ans2;j++)
			if(d[j]>=h[i] && d[j]<nowh) nowh=d[j],wh=j;
		if(wh) d[wh]=h[i];
		else d[++ans2]=h[i];
	}
	printf("%d\n%d",ans1,ans2);
	return 0;
}
2022/9/18 12:01
加载中...