188分没过 求助
查看原帖
188分没过 求助
705506
BESTPLAYER楼主2023/2/11 13:58
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int in, num = 0;
    vector<int> height;
    while(cin >> in)
    {
        num++;
        height.push_back(in);
        if(cin.get() == '\n')
            break;
    }
    vector<int> get1, get2;
    get1.push_back(height[0]);
    for(int i = 1; i < num; i++)
    {
        if(height[i] <= get1[get1.size() - 1])
            get1.push_back(height[i]);
        else
        {
            int left = 0, right = get1.size() - 1;
            while(left < right)
            {
                int mid = (left + right) >> 1;
                if(get1[mid] < height[i])
                    right = mid;
                else
                    left = mid + 1;
            }
            get1[left] = max(get1[left], height[i]);
        }
    }
    get2.push_back(height[0]);
    for(int i = 1; i < num; i++)
    {
        if(height[i] >= get2[get2.size() - 1])
            get2.push_back(height[i]);
        else
        {
            int left = 0, right = get2.size() - 1;
            while(left < right)
            {
                int mid = (left + right) >> 1;
                if(get2[mid] >= height[i])
                    right = mid;
                else
                    left = mid + 1;
            }
            get2[left] = min(get2[left], height[i]);
        }
    }
    cout << get1.size() << endl << get2.size();
    return 0;
}
2023/2/11 13:58
加载中...