zoukankan      html  css  js  c++  java
  • 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
    ", len);
    	
    	return 0;
    }
    
    欢迎评论交流!
  • 相关阅读:
    合并区间
    编译与运行
    传递信息
    划分字母区间
    无重叠区间
    用最少数量的箭引爆气球
    根据身高重建队列
    二叉树展开为链表
    动态添加按钮
    基础知识
  • 原文地址:https://www.cnblogs.com/alking1001/p/14526062.html
Copyright © 2011-2022 走看看