188分求调,玄关
查看原帖
188分求调,玄关
1149892
Zhang201233楼主2025/8/29 16:26
#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],cnt,s[1000005];
int main() {
	while(cin>>a[n]) {
		n++;
	}
	n--;
	memset(s,0,sizeof(s));
	cnt=1;
	s[1]=a[1];
	for (int i=2; i<=n; i++) {
		if(a[i]<=s[cnt]) {
			s[++cnt]=a[i];
		} else {
			int l=1,r=cnt;
			while(l<r) {
				int mid=(l+r)>>1;
				if(a[i]>s[mid]) {
					r=mid;
				} else {
					l=mid+1;
				}
			}
			s[l]=a[i];
		}
	}
	int sum=cnt;
	memset(s, 0, sizeof(s));
	cnt = 1;
	s[1] = a[1];
	for (int i = 2; i <= n; i++) {
		if (a[i] > s[cnt]) {
			cnt++;
			s[cnt] = a[i];
		} else {
			int l = 1, r = cnt;
			while (l < r) {
				int mid = (l + r) >> 1;
				if (a[i] <= s[mid]) r = mid;
				else {
					l = mid + 1;
				}
			}
			s[l] =a[i];
		}
	}
	cout<<sum<<endl<<cnt;
}
2025/8/29 16:26
加载中...