求助,Subtask#1WA了
查看原帖
求助,Subtask#1WA了
401504
Taro2020楼主2023/7/16 09:31
#include<bits/stdc++.h>
using namespace std;

int n,a[100010];
int f[100010];
int g[100010];

int f1(string s)
{
    int h = 1,ans = 0;
    for(int i = s.length() - 1;i >= 1;i--)
    {
        ans += (s[i] - '0') * h;
        h *= 10;
    }
    return ans;
}
string s,str = "0";
void input()
{
    getline(cin,s);
    
    int l = s.length();
    for(int i = 0;i < l;i++)
    {
        if(s[i] == ' ')
        {
            n++;
            a[n] = f1(str);
            str = "0";
            continue;
        }
        str += s[i];
    }
    n++;
    a[n] = f1(str);
    str = "0";
}

void work1()
{
    int len = 1;
    f[1] = a[1];
    for(int i =2;i <= n;i++)
    {
        if(a[i] <= f[len])
        {
            len++;
            f[len] = a[i];
        }
        else
        {
            int j = 0;
            int l = 1,r = len,mid;
            while(l < r + 1)
            {
                mid = (l + r) / 2;
                if(a[i] > f[mid])
                {
                    j = mid;
                    r = mid - 1;
                }
                else
                {
                    l = mid + 1;
                }
            }
            f[j] = a[i];
        }
    }
    cout << len;
}

void work2()
{
    int len = 1;
    g[1] = a[1];
    for(int i =2;i <= n;i++)
    {
        if(a[i] > g[len])
        {
            len++;
            g[len] = a[i];
        }
        else
        {
            int j = 0;
            int l = 1,r = len,mid;
            while(l < r + 1)
            {
                mid = (l + r) / 2;
                if(a[i] <= g[mid])
                {
                    j = mid;
                    r = mid - 1;
                }
                else
                {
                    l = mid + 1;
                }
            }
            g[j] = a[i];
        }
    }
    cout << len;
}

int main()
{
    input();
    work1();
   cout << endl;
   work2();
}
2023/7/16 09:31
加载中...