Dilworth25分求调
查看原帖
Dilworth25分求调
454444
StenvenPig楼主2024/10/24 17:05
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m,a[1000010];
int find1(int l,int r){
	int b[100010];
	memset(b,0x3f,sizeof b);
	int ans=r-l+1;
	for(int i=l;i<=r;i++){
		*upper_bound(b+1,b+1+ans,a[i])=a[i];
	}
	int sum=lower_bound(b+1,b+ans+1,INF)-b-1;
	return sum;
}
int find2(int l,int r){
	int b[10001];
	int ans=r-l+1;
	memset(b,0x3f,sizeof b);
	for(int i=l;i<=r;i++){
		*lower_bound(b+1,b+ans+1,a[i])=a[i];
	}
	int sum=lower_bound(b+1,b+ans+1,INF)-b-1;
	return sum;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	while(m--){
		int a1,a2,a3;
		cin>>a1>>a2>>a3;
		if(a1==1){
			cout<<find1(a2,a3)<<endl;
		}else{
			cout<<find2(a2,a3)<<endl;
		}
	}
	return 0;
}


感觉写的很怪又找不出来问题,大佬指点一下我呗

2024/10/24 17:05
加载中...