题解 P1410 【子序列】

· · 题解

有一说一,这数据真的好弱,不需要判断是否长度是N/2也能过。所以直接贪心就可以。大体思路就是定义两个数列中的最大元素分别为max1,max2,初始赋值为负无穷,然后一个个读入数据,如果这个数比max1大,把他设为第一个数列的最大元素,即max1=a,然后直接continue,不然有可能还会放到第二个数列中。同理如果这个数比max2大,把他设为第二个数列的最大元素,即max2=a.如果出现一个数无法放进两个数列中,比如此时数列1最大元素是8,数列2最大元素是6,你读入的这个数据是3,两个条件都不符合,让flag=1,(注意,不要break),因为这是边读边做的,break会导致你读入出问题。


#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a;
int main()
{
    while(cin>>n)
    {
        int flag=0,max1=-0x3f3f3f3f,max2=-0x3f3f3f3f;
        for(int i=1;i<=n;i++)
        {
            cin>>a;
            if(a>max1)
            {
               max1=a;
               continue;
            }
            if(a>max2)
            {
               max2=a;
               continue;    
            }
            flag=1;
        }
        if(flag==1)
        cout<<"No!"<<endl;
        else cout<<"Yes!"<<endl;
    }
    return 0;
}