zoukankan      html  css  js  c++  java
  • FZU2216【二分】

    题意:

    百度。

    思路:

    一个连续数组111222233344444555666的每一个起伏转折即需要一张万能牌。

    然后二分一下得最长区间。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<map>
    using namespace std;
    typedef long long LL;
    const LL mod=1e9+7;
    const int N=1e5+10;
    int b[N];
    bool vis[N];
    int num;
    int Search(int left,int right)
    {
        int L=left;
        while(left<right)
        {
            int mid=left+(right-left+1)/2;
            if(b[mid]-b[L]<=num)
                left=mid;
            else
                right=mid-1;
        }
        return left;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,m,x;
            scanf("%d%d",&n,&m);
            memset(vis,0,sizeof(vis));
            num=0;
            for(int i=0;i<n;i++)
            {
                scanf("%d",&x);
                if(x==0)
                    num++;
                else
                    vis[x]=1;
            }
            b[0]=0;
            for(int i=1;i<=m;i++)
            {
                if(vis[i])
                    b[i]=b[i-1];
                else
                    b[i]=b[i-1]+1;
            }
            int res=0;
            for(int i=0;i<=m;i++)
                res=max(Search(i,m)-i,res);
            printf("%d
    ",res);
        }
        return 0;
    }


  • 相关阅读:
    按年按月分组查询
    dir listing 目录文件列表索引
    ps/sql developer 登录远程服务器
    Sql 基础问题
    数组的ES6,ES7的方法
    release中技术点的定义
    数仓面试
    项目总体分析
    spark
    dmp准备工作
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777395.html
Copyright © 2011-2022 走看看