2015ACM/ICPC亚洲区长春站 HDU 5532

来源:互联网 发布:程不时 知乎 编辑:程序博客网 时间:2024/04/28 06:02

题意:删除一个数字之后,剩下的数列是非递增或非递减。

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxm=1e5+10;int a[maxm];int n;int ok;void judge1(){    int num=0;    int k;    for(int i=1;i<n;i++)    {        if(a[i]<a[i-1])        {            num++;            k=i;        }    }    if(num==0)        ok=1;    else if(num==1)    {        //这些情况的例子 3 1 1 2 3   /*******/   1 2 4 3 4    /*********/    1 1 2 1 1 4    /*****/  1 2 3 4 3        if(k==1||k==n-1||a[k-1]<=a[k+1]||a[k-2]<=a[k])        {            ok=1;        }    }}void judge2(){    int num=0;    int k;    for(int i=1;i<n;i++)    {        if(a[i]>a[i-1])        {            num++;            k=i;        }    }    if(num==0)        ok=1;    else if(num==1)    {        if(k==1||k==n-1||a[k-1]>=a[k+1]||a[k-2]>=a[k])        {            ok=1;        }    }}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        ok=0;        judge1();        if(ok)        {            printf("YES\n");            continue;        }        judge2();        if(ok)        {            printf("YES\n");        }        else        {            printf("NO\n");        }    }    return 0;}


//正着找一个最长不下降L1,反正找一个最长不下降(正着就是最长不递减)L2,如L1==N||L1==N-1||L2==N||L2==N-1的话,证明可以YES,不然NO#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxm=1e5+10;int a[maxm];int b[maxm];int dp1[maxm];int dp2[maxm];int n;int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n;        scanf("%d",&n);        int i;        int temp1,temp2;        for(i=1; i<=n; i++)        {            scanf("%d",&a[i]);            b[n-i+1]=a[i];        }        dp1[1]=a[1];        dp2[1]=b[1];        int len1=1;        int len2=1;        for(i=2; i<=n; i++)        {            if(dp1[len1]<=a[i])//最长不下降            {                dp1[++len1]=a[i];            }            else            {                temp1=upper_bound(dp1+1,dp1+len1+1,a[i])-dp1;                dp1[temp1]=a[i];            }        }        for(i=2; i<=n; i++)        {            if(dp2[len2]<=b[i])//反找最长不下降            {                dp2[++len2]=b[i];            }            else            {                temp2=upper_bound(dp2+1,dp2+len2+1,b[i])-dp2;                dp2[temp2]=b[i];            }        }        if(len1==n-1||len2==n-1||len1==n||len2==n)        {            printf("YES\n");        }        else        {            printf("NO\n");        }    }    return 0;}


0 0
原创粉丝点击