csu 1553: Good subsequence (最长连续子序列)

http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2071&pid=6

题意:有一个由n个数组成的序列 

         要求出一个满足 max-min<=k 的最长子序列

思路:(听说数据大的情况可以用单调栈解决 但是我只是纯粹暴力了)

          首先枚举左界 把max和min都赋值为 a[i]

           再枚举右界 每次判断max-min是否小于等于k

           求出最大值

 

#include<cstdio>

#include<iostream>

#include<cstring>

#include<cmath>

#include<stdlib.h>

#include<algorithm>

#include<queue>

#include<stack>

#include<ctype.h>

using namespace std;

int a[10000+100];

int main()

{

    int n,k;

    int i,j;

    while(scanf("%d%d",&n,&k)!=EOF)

    {

        int ans=1;

        for(i=0;i<n;i++) scanf("%d",&a[i]);

        for(i=0;i<n;i++)

        {

            if(n-i<ans) break;

            int temp=1;

            int maxx=a[i];

            int minn=a[i];

            for(j=i+1;j<n;j++)

            {

                if(a[j]>maxx)

                {

                    maxx=a[j];

                }

                else if(a[j]<minn)

                {

                    minn=a[j];

                }

                if(maxx-minn>k) break;

                temp++;

            }

            if(ans<temp) ans=temp;

        }

        printf("%d\n",ans);

    }

    return 0;

}

  

你可能感兴趣的:(sequence)