【题解】牛牛出队

题意

给你一个有个元素的队列,你可以先从队列的队首出队个元素,然后对于剩下的元素你可以任意选择从队首或队尾出队,使得之后的元素出队组成的序列为一个非递减序列。求最小的

题解

首先若队列中的元素一开始就递增或递减,那么不需要提前出队答案就是。否则我们从队列的后边开始考虑,从后往前找到第一个先递增后递减的序列(逆序考虑),答案就是减去这个序列的长度,若含有两个这个的序列,这说明无论怎么出队都会出现递减的情况。

复杂度

时间复杂度

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
            scanf("%d",&a[i]);
        a[0]=-1;
        int cnt=0,flag=0;
        for(int i=n; i>=1; i--)
            if(a[i-1]<a[i])
                cnt=1;
            else if(cnt&&a[i-1]>a[i])
            {
                printf("%d\n",i-1);
                flag=1;
                break;
            }
        if(!flag)
            printf("0\n");
    }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务