各位大佬,二分求救
查看原帖
各位大佬,二分求救
283894
Ang_QwQ楼主2022/7/15 18:41
#include<bits/stdc++.h>
using namespace std;
const int N=200001;
int n,nor[N],sou[1000001],f[N],q[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>nor[i];
		cin>>sou[nor[i]];//表示nor[i]对应的友好城市 
	}
	
	sort(1+nor,1+n+nor);
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		cout<<nor[i]<<" "<<sou[nor[i]]<<endl;
//	}
	/*for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			if(sou[nor[i]]>sou[nor[j]]){
	//			cout<<123;
				f[i]=f[j]+1;
			}
		}
		f[i]=max(f[i],1);
	}
	int maxn=-1;
	for(int i=1;i<=n;i++){
		maxn=max(maxn,f[i]);
	//	cout<<f[i]<<" ";
	} 
	cout<<maxn;//DP解法O(n^2)*/
	
	
	//P2:二分
	int l=1,r=n,k=0;
	for(int i=1;i<=n;i++){
		if(sou[nor[i]]>q[k]){//入队 
			k++;
			q[k]=sou[nor[i]];
		}
		else{
			l=1,r=k;
			int mid;
			while(l<r){
				mid=(l+r)/2;
				if(sou[nor[i]]>q[mid]){
					l=mid+1;
				}
				else {
					r=mid-1;
				}
			}
			q[mid]=sou[nor[i]];	
		}
	}
	cout<<k;
}	
2022/7/15 18:41
加载中...