200分求调
查看原帖
200分求调
1086979
xlw0524楼主2025/1/19 22:36

被黑客了

#include<bits/stdc++.h>
using namespace std;
int num[100001];
string s;
int n,t,maxx[100001],len;

int getPos(int x){
	int l=1;
	int r=len;
	while(l<=r){
		int m=(l+r)/2;
		if(maxx[m]>=x){
			l=m+1;
		}else{
			r=m-1;
		}
	}
	return r;
}

int getIdx(int x){
	int l=1;
	int r=len;
	while(l<=r){
		int m=(l+r)/2;
		if(maxx[m]==x){
			return m;
		}else if(maxx[m]>x){
			r=m-1;
		}else{
			l=m+1;
		}
	}
	return l;
}
int main(){
	getline(cin,s);
	for(int i=0;i<s.size();i++){
		if(s[i]==' '){
			n++;
			num[n]=t;
			t=0;
		}else{
			t*=10;
			t+=(s[i]-'0');
		}
	}
    n++;
	num[n]=t;
	maxx[1]=num[1];
	len=1;
	for(int i=2;i<=n;i++){
	    int pos=getPos(num[i]);
    	len=max(len,pos+1);
    	maxx[pos+1]=max(maxx[pos+1],num[i]);
	}
	cout<<len;
	memset(maxx,0,sizeof(maxx));
	len=0;
	maxx[1]=num[1];
	len=1;
	for(int i=2;i<=n;i++){
		sort(maxx+1,maxx+len+1);
		int idx=getIdx(num[i]);
		if(idx>len){
			len++;
			maxx[len]=num[i];
		}else{
			maxx[idx]=min(maxx[idx],num[i]);
		}
	} 
	cout<<endl<<len;
	return 0;
}
2025/1/19 22:36
加载中...