zoukankan      html  css  js  c++  java
  • 人类基因组

    问题描述

    输入格式

    输出格式

    样例输入

    样例输出

    数据范围

    题解

    把初始串复制一遍,接在后面,然后求前缀和sum

    则Ak,Ak+1,……,An-1,A0,A1……,Ak-1即为Ak,Ak+1,……,An-1,An,An+1……,An+k-1

    任意的前i项和为sum[i]-sum[k-1]

    满足对于任意的前 和都满足不小于0,即从k到n+k-1这段区间的任意sum[i]>=sum[k-1],只要最小的sum[i]>=sum[k-1]就行了。

    单调队列从后往前维护最小值即可。

     1 #include <cstdio>
     2 int n,a[1000005],sum[2000005];
     3 int q[5000005][2],h,t,ans;
     4 int main()
     5 {
     6     int i,j;
     7     scanf("%d",&n);
     8     for (i=1;i<=n;i++)
     9       scanf("%d",&a[i]),
    10       sum[i]=sum[i-1]+a[i],
    11       sum[i+n]=a[i];
    12     int n2=n<<1;
    13     for (i=n+1;i<=n2;i++) 
    14       sum[i]+=sum[i-1];
    15     q[++t][0]=sum[n2-1]; q[t][1]=n2-1; h=1;
    16     for (i=n2-2;i>=n;i--)
    17     {
    18         while (sum[i]<q[t][0] && t>=h) t--;
    19         q[++t][0]=sum[i];  q[t][1]=i;
    20     }
    21     for (i=n;i>=1;i--)
    22     {
    23         if (q[h][0]>=sum[i-1]) ans++;
    24         while (q[h][1]-n+1>i && h<t) h++;
    25         while (sum[i-1]<q[t][0] && t>=h) t--;
    26         q[++t][0]=sum[i-1];  q[t][1]=i-1;
    27     }
    28     printf("%d",ans);
    29     return 0;
    30 }
  • 相关阅读:
    关于content-type请求头的说明
    RabbitMQ
    tornado
    flask总结之session,websocket,上下文管理
    爬虫相关问题总结
    爬虫之scrapy框架
    爬虫之Selenium模块
    爬虫之Beautifulsoup及xpath
    爬虫之requests
    SQLAlchemy
  • 原文地址:https://www.cnblogs.com/rabbit1103/p/9743379.html
Copyright © 2011-2022 走看看