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 ",ans); } return 0; }