• 假期


    【题目描述】

    John决定让奶牛们放假,假期可以为1~N天内的任意连续的一段,每一天都有一个享受指数W。

    奶牛们要求假期不能短于P天,也不能长于Q天。

    现询问奶牛们能够获得的最大享受指数是多少。

    【输入描述】

    第一行输入三个整数N、P、Q;

    第二行输入N个数字,分别表示每一天的享受指数W。

    【输出描述】

    输出一个整数,表示最大享受指数。

    【样例输入】

    5 2 4

    -9 -4 -3 8 -6

    【样例输出】

    5

    【数据范围及提示】

    样例中,选择第3~4天,享受指数为-3+8=5。

    对于50%的数据,1 <= N <= 10000;

    对于100%的数据,1 <= N <= 100000,1 <= p <= q <= N。

    源代码:
    
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    long long Ans=-0x7fffffff,Sum[100001]; //数据范围!7f才是真理!
    int N,Left,Right,Q[100001]; int main() { scanf("%d%d%d",&N,&Left,&Right); Sum[0]=0; for (int a=1;a<=N;a++) //前缀和。 { int t; scanf("%d",&t); Sum[a]=Sum[a-1]+t; } int Head=1,Tail=0; for (int a=Left;a<=N;a++) //单调队列优化,上来赋值Left是为了防止越界。 { while (Head<=Tail&&Sum[Q[Tail]]>=Sum[a-Left]) Tail--; Q[++Tail]=a-Left; if (Q[Head]<a-Right) Head++; Ans=max(Ans,Sum[a]-Sum[Q[Head]]); } printf("%lld",Ans); return 0; } /* 先用前缀和处理一下。 然后单调队列找出最小的前缀和,然后作差取最大即可。 */
  • 相关阅读:
    机器学习之--画图补充
    机器学习之--KNN算法简单实现
    redhat centos yum源的安装
    redhat6.5 linux 安装mysql5.6.27
    bash 截取字符串
    redhat vim编辑器永久添加行号及搜索
    Orthomcl的详细使用
    InterProScan 5.25-64.0 安装和使用
    paml正选择处理时序列里有终止密码子怎么处理掉
    R语言putty中直接使用X11(Xming)绘图
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5965213.html
Copyright © 2020-2023  润新知