关于#c++#的问题:如何修改代码可以通过这一题

如何修改代码可以通过这一题,用什么算法,只能通过测试样例,运行超时。

img

img

img

img

img

img

img

判断bea没必要这么麻烦,用一个标记记录是否出现递减数字,然后判断每次新插入的数跟vector中最后一个数和第一个数的大小即可。
运行结果:

img

代码:

#include <iostream>

using namespace std;

char str[200005]={0};
int arr[200005];
int main()
{
    int t,q,i=0,j=0;
    int val;
    int k=0;
    int minVal = 0,nextVal = 0;
    scanf("%d",&t);
    while(i<t)
    {
        cin >> q;
        int flag = 0; //标记是否出现递减数
        k = 0;
        for(j=0;j<q;j++) //读入q个数
        {
            scanf("%d",&val);
            if(k== 0 ) //是beatiful
            {
                str[j]='1';
                arr[k++]=val;
                minVal = val;
            }else if(k == 1) //是beatiful
            {
                str[j]='1';
                arr[k++]=val;

                //判断是否出现递减的情况
                if(arr[1] < arr[0])
                {
                    minVal = arr[1];
                    flag = 1;
                }else
                    minVal = arr[0];
            }else
            {
                if(flag== 0) //没有出现递减数,只需要判断当前数与vector中的最后一个数的大小
                {
                    if(val >= arr[k-1])
                    {
                        str[j]='1';
                        arr[k++]=val; //是
                    }else //出现递减数
                    {
                        flag = 1;
                        str[j]='1';
                        arr[k++]=val;
                        //找到当前比val大的最前的一个数
                        minVal = val;
                        for(int x = 0;x<k;x++)
                        {
                            if(arr[x] > val)
                            {
                                nextVal = arr[x];
                                break;
                            }
                        }
                    }
                }else
                {
                    if(val >= minVal && val <= nextVal)
                    {
                        str[j]='1';
                        arr[k++]=val;
                    }else{
                        str[j]='0';
                    }
                }
            }
        }
        str[q] = 0;
        //输出
        cout << str<<endl;
        i++;
    }
    return 0;
}

#include <iostream>
#include <vector>
#include <string>

int main()
{
    int t;
    std::cin >> t;

    while (t--)
    {
        int q;
        std::cin >> q;
        std::vector<int> queries(q);
        for (int i = 0; i < q; i++)
        {
            std::cin >> queries[i];
        }

        std::string result;
        int min1 = 1e9 + 1, min2 = 1e9 + 1;

        for (int x : queries)
        {
            if (x <= min1)
            {
                result.push_back('1');
                min1 = x;
            }
            else if (x <= min2)
            {
                result.push_back('1');
                min2 = x;
            }
            else
            {
                result.push_back('0');
            }
        }

        std::cout << result << std::endl;
    }

    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632