博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
省选专练POI2015 Wilcze doły
阅读量:4677 次
发布时间:2019-06-09

本文共 974 字,大约阅读时间需要 3 分钟。

较水。

单调队列扫一遍即可。

#include
using namespace std;typedef int INT;#define int long longconst int N=4e6+500;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void read(int &x){ x=0; int f=1; char ch=nc(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=nc(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=nc(); } x*=f;}int n,p,d;int a[N]={};int sum[N]={};int g[N]={};int q[N]={};int head,tail;INT main(){ read(n); read(p); read(d); for(int i=1;i<=n;i++){ read(a[i]); sum[i]=sum[i-1]+a[i]; } for(int i=0;i<=n;i++){ if(i+d>n) g[i]=sum[n]-sum[i]; else g[i]=sum[i+d]-sum[i]; } q[1]=0; head=1; tail=1; int ans=d,idx=0; for(int i=d+1;i<=n;i++){ while(head<=tail&&g[q[tail]]<=g[i-d])tail--; tail++; q[tail]=i-d;// idx=0; while(head<=tail&&idx
<(sum[i]-sum[idx]-g[q[head]])){ idx++; while(q[head]

转载于:https://www.cnblogs.com/Leo-JAM/p/10079255.html

你可能感兴趣的文章
Python--小功能应用
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒”
查看>>
js去除范围内所有标签并显示指定字符串
查看>>
结对项目进度2
查看>>
git + git flow 的简单介绍
查看>>
如果我们想要交换两个数字,就可以使用位运算
查看>>
求给出第 K个 N位二进制数,该二进制数不得有相邻的“1”
查看>>
P1059 明明的随机数【去重排序】
查看>>
HDU 1060 Leftmost Digit【log10/求N^N的最高位数字是多少】
查看>>
tomcat配置文件web.xml与server.xml解析--重要
查看>>
【C语言】《C Primer Plus》递归:以二进制形式输出整数
查看>>
使用框架的——好处
查看>>
如此大量的代码,但每个类里面的代码却不显得特别多,原因。。。。。。。。。。。。...
查看>>
C#特征备忘
查看>>
Java 面向对象 之 final 关键字
查看>>
Contact Form 7邮件发送失败的解决办法
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>
Python学习日记(1)使用if __name__ == "main"
查看>>
二进制的最大公约数
查看>>
Mybatis学习笔记(一) 之框架原理
查看>>