• HDU5806 NanoApe Loves Sequence Ⅱ (BestCoder Round #86 C)二分


    分析:大于等于m的变成1,否则变成0,预处理前缀和,枚举起点,找到第一个点前缀和大于m即可

       找第一个点可以二分可以尺取

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    typedef long long LL;
    const int N = 2e5+5;
    int T,n,m,k,a[N],sum[N];
    int main(){
      scanf("%d",&T);
      while(T--){
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=n;++i){
         scanf("%d",&a[i]);
         if(a[i]>=m)a[i]=1;
         else a[i]=0; 
        }
        for(int i=1;i<=n;++i)sum[i]=sum[i-1]+a[i];
        LL ret=0;
        for(int i=1;i<=n;++i){
           if(n-i+1<k)break;
           if(sum[n]-sum[i-1]<k)break;
           int l=i+k-1,r=n;
           while(l<r){
             int mid=(l+r)>>1;
             if(sum[mid]-sum[i-1]>=k)r=mid;
             else l=mid+1;
           }
           int tmp=(l+r)>>1;
           ret+=(n-tmp+1);
        }
        printf("%I64d
    ",ret); 
      }
      return 0;
    }
    View Code
  • 相关阅读:
    日常巡检
    mysql 主从
    tomcat +apache 动静分离
    ELK安装
    LVS-NAT模式
    shell 三剑客
    shell $传参
    zabbix安装
    lvs-DR 负载均衡
    解决ubuntu中pycharm的图标没有问题
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5747456.html
Copyright © 2020-2023  润新知