1045 Favorite Color Stripe

1045 Favorite Color Stripe

先把需要的字符按照输入的顺序赋予权值,然后去掉不需要的字符,再求最长不递减序列的长度就可以了。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
typedef long long ll;
using namespace std;
const double eps=1e-6;
const int inf=0x3f3f3f3f;
const int MAXN=1E4+7;
int n, m, l;
int w[207], squ[MAXN];

int main()
{
	scanf("%d%d", &n, &m);
	int t;
	for(int i=0; i<m; i++){
		scanf("%d", &t);
		w[t] = i+1;
	}
	scanf("%d", &l);
	int len = 0;
	for(int i=0; i<l; i++){
		scanf("%d", &t);
		if(w[t]>0)
			squ[len++]=w[t];
	}
	l = len;
	len = 1;
	for(int i=1; i<l; i++){
		if(squ[i] >= squ[len-1]) //注意是不递减的序列
			squ[len++] = squ[i];
		else{
            //不递减意味着应该找到一个大于它的位置
			int j=upper_bound(squ, squ+len, squ[i])-squ; 
			squ[j] = squ[i];
		}
	}
	printf("%d\n", len);
	
	return 0;
}
posted @ 2021-03-12 19:52  ALKING1001  阅读(37)  评论(0编辑  收藏  举报