B

来源:互联网 发布:mac系统怎么保存文件 编辑:程序博客网 时间:2024/04/30 12:54

点击打开链接

给你一些序列,判断是否接近上升序列或者下降序列

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#include<vector>#include<map>#include<set>#include<stdlib.h>#include<cmath>#include<string>#include<algorithm>#include<iostream>#define N 100005#define exp 1e-10using namespace std;int a[N],b[N],d[N];int t,n;int bsearch(int size,int a){    int l=0,r=size-1;    while(l<=r)    {        int mid=(l+r)/2;        if(a>=d[mid-1] && a<d[mid])            return mid;        else if( a<d[mid])            r=mid-1;        else            l=mid+1;    }}int lis(int a[])//求最长单调子序列o(n)logn 返回的是长度{    int size=1,j;    d[0]=a[0];    for(int i=1;i<n;i++)    {        if(a[i] < d[0])            j=0;        else if(a[i] >= d[size-1])            j=size++;        else            j=bsearch(size,a[i]);        d[j]=a[i];    }    return size;}int main(){    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d", &a[i]);            b[n-i-1]=a[i];        }        int size1=lis(a);        int size2=lis(b);        if(size1>=n-1 ||size2>=n-1)            puts("YES");        else            puts("NO");    }}


原创粉丝点击