求助!
查看原帖
求助!
1037516
DreamTsinghua楼主2023/9/26 08:33
#include <bits/stdc++.h>

using namespace std ;
int len ;
const int N = 1e5 + 10 ;

int a[N] ;
int n ;
int p[N], f[N] ;

int bound(int x) {
	
	int l = 1, r = len ;
	while (l < r) {
		int mid = l + r >> 1;
		if (p[f[mid]] > p[x])
			r = mid ;
		else
			l = mid + 1 ;
	}
	return l;
	
	
	int l = 1 , r = len ;
	while(l < r)
	{
		int mid = l + r + 1 >> 1 ;
		if (p[f[mid]] < p[x])
		l = mid ;
		else r = mid - 1 ;
	}
	
	return r + 1 ;
}

int main() {
	cin >> n ;

	for (int i = 1 ; i <= n ; i ++)
		cin >> a[i] ;

	for (int i = 1 ; i <= n ; i ++) {
		int x ;
		cin >> x ;
		p[x] = i;
	}

	for (int i = 1 ; i <= n ; i ++) {
		if (p[a[i]] > p[f[len]])
			f[++len] = a[i] ;
		else
			f[bound(a[i])] = a[i] ;
	}

	cout << len ;
	return 0 ;
}

bound 函数里面的二分有什么区别吗? 第一个100 第二个20

2023/9/26 08:33
加载中...