码迷,mamicode.com
首页 > 其他好文 > 详细

BestCoder Round #84

时间:2016-07-24 16:04:41      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

A.贪心

B.b题我昨晚看两个队友都没写出来,早上看觉得挺简单的,天真以为是要以ai结尾的连续的,wa1...然后知道是可以不连续的,做着做着忘了是要以ai结尾的,以为是前面的子序列最长就可以了,wa4...

其实如果了解O(nlogn)的算法就可以很快想出来了,亏我还是写过模板的人,各种wa我也是醉了,每次只要在找到当前数字在LIS数组上的位置就可以了

题目还是挺好的,我发现题目写的太少很容易看错题意呀,怎么破

技术分享
#include <iostream>
#include <map>
#include <cstdio>
#include <cstring>
using namespace std;

const int MAXN = 1e5+100;

int a[MAXN],b[MAXN];
int c[MAXN];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        int n;
        int top=0;
        int mmax = -1;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            int l=0,r=top;
            while(l<r){
                int m = l+(r-l)/2;
                if(b[m]>=a[i]){
                    r = m;
                }else{
                    l = m+1;
                }
            }
            if(l==top){top++;b[l] = a[i];}
            else if(a[i]<b[l]){
                b[l] = a[i];
            }
            //mmax = max(mmax,l+1);
            c[i] = l+1;
        }
        for(int i=0;i<n;i++){
            if(i==0)printf("1");
            else{
                printf(" %d",c[i]);
            }
        }
        cout<<endl;
    }

    return 0;
}
View Code

 

BestCoder Round #84

标签:

原文地址:http://www.cnblogs.com/EdsonLin/p/5700792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!