QAQ 80分求助 难道队列只能得80分吗
查看原帖
QAQ 80分求助 难道队列只能得80分吗
311502
逸之为一楼主2021/8/6 14:44
#include<bits/stdc++.h>
using namespace std;
const int INF = 0 , INT= 1 , maxs=1000010 ;
long long que[maxs] , tail =INT;
long long A[maxs],N=INT;
long long vis[maxs],M;
long long len1,len2;//最长不上升子序列和最长单调上升子序列
int main(){
	while(cin>>A[N]){ N++; }N--;
	
	for(int i=1;i<=N;i++){
		while(tail > INT && A[i] > A[que[tail-1]]){ vis[que[tail-1]]=INF;M--;tail--; } 
		que[tail++]=i;vis[i]=INT;M++;
	} len1=M;len2++;//求最长不上升子序列并将最长单调上升子序列++
	while(M!=N){
		tail=INT; 
		for(int i=1;i<=N;i++){
			if(vis[i]==INT) continue; 
			while(tail > INT && A[i] > A[que[tail-1]]){vis[que[tail-1]]=INF;M--;tail--; } 
			que[tail++]=i;vis[i]=INT;M++;
		} len2++;//求最长单调上升子序列直到所有导弹都被拦截
	}cout<<len1<<' '<<len2<<endl;//输出
	return 0;
} 
2021/8/6 14:44
加载中...