holiday(假期)

    —— 一道妙题(codevs3622)

 

Description

经过几个月辛勤的工作,FJ 决定让奶牛放假。假期可以在1…N 天内任意选择一段(需要连续),每一天都有一个享受指数W。但是奶牛的要求非常苛刻,假期不能短于P天,否则奶牛不能得到足够的休息;假期也不能超过Q 天,否则奶牛会玩的腻烦。FJ 想知道奶牛们能获得的最大享受指数。

 

Input(holiday.in)

第一行:N,P,Q. 
第二行:N 个数字,中间用一个空格隔开。

 

Output(holiday.out)

一个整数,奶牛们能获得的最大享受指数。

 

Sample Input

5 2 4 
-9 -4 -3 8 -6

 

Sample Output

5

 

Limitation

time:1s 
memory:65536kb 
50% 1≤N≤10000 
100% 1≤N≤100000 
1<=p<=q<=n

 

Hint

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

 

explanation

这道题需要仔细想一想,仔细想一想…… 
首先,我们想一想怎么算每个“几天内”的最大值,首先想可以暴力,枚举一次天数,再枚举一次i,时间是 O(n2),爆了。
所以我们还要想一想。 
前缀和?可以优化…… 
线段树?能考虑…… 
这几个小想法组合起来就可以了,但是好像不是很好想。 
我们可以枚举第一个休息日的编号i,我们要算从这个第i天开始,往后的P到Q天里快乐指数最大那一天快乐指数是多少,枚举过后取个max就行了。 
按这种方式算的话,如何将时间复杂度优化到最小? 
考虑前缀和和线段树。 
前缀和数组pre维护的是的快乐指数之和,线段树求的是i+P-1 ~ i+Q-1这一段区间的快乐指数前缀和最大值maxn,我们发现maxn-pre[i]就是从这个第i天开始,往后的P到Q天里快乐指数最大那一天快乐指数是多少。 
其实求最大值的部分,用st表或者其他的也行,只不过我觉得线段树更好。 
总共的复杂度就是O(nlogn)。

 

code

我没开long long,记得写的时候要开。

#include<cstdio>
#include<algorithm>
using namespace std;
int n,mxd,mnd,maxn = -0x3f3f3f3f;
int num[];
int pre[];
int tree[];
void build(int o,int l,int r)
{
if(l == r)
{
tree[o] = pre[l];
return;
}
int mid = (l + r) >> ;
build(o<<,l,mid);
build(o<<|,mid+,r);
tree[o] = max(tree[o<<],tree[o<<|]);
}
int query(int L,int R,int l,int r,int o)
{
if(L <= l && r <= R)
{
return tree[o];
}
int mid = (l+r)>>;
int maximum=;
if(L <= mid)
return query(L,R,l,mid,o<<);
else if(R > mid)
return query(L,R,mid+,r,o<<|);
else return max(query(L,R,l,mid,o<<),query(L,R,mid+,r,o<<|));
}
void dokyumento()
{
freopen("holiday.in","r",stdin);
freopen("holiday.out","w",stdout);
}
int main()
{
// dokyumento();
scanf("%d%d%d",&n,&mnd,&mxd);
for(int i=;i<=n;i++)
{
scanf("%d",&num[i]);
pre[i] = pre[i-] + num[i];
}
build(,,n);
for(int i=;i<=n;i++)
{
int ll = i + mnd - ;
if(ll > n)
break;
int rr = (i + mxd - > n ? n : i + mxd -);
maxn = max(maxn,query(ll,rr,,n,)-pre[i-]);
}
printf("%d",maxn);
return ;
}

holiday(假期)_题解的更多相关文章

  1. 【BZOJ4367】[IOI2014]holiday假期 分治+主席树

    [BZOJ4367][IOI2014]holiday假期 Description 健佳正在制定下个假期去台湾的游玩计划.在这个假期,健佳将会在城市之间奔波,并且参观这些城市的景点.在台湾共有n个城市, ...

  2. [IOI2014]holiday假期(分治+主席树)

    题目描述 健佳正在制定下个假期去台湾的游玩计划.在这个假期,健佳将会在城市之间奔波,并且参观这些城市的景点.在台湾共有n个城市,它们全部位于一条高速公路上.这些城市连续地编号为0到n-1.对于城市i( ...

  3. luogu P5892 [IOI2014]holiday 假期 决策单调性优化dp 主席树

    LINK:holiday 考虑第一个subtask. 容易想到n^2暴力枚举之后再暴力计算答案. 第二个subtask 暴力枚举终点可以利用主席树快速统计答案. 第三个subtask 暴力枚举两端利用 ...

  4. 【USACO 2012 Open】奶牛赛跑_题解

    奶牛赛跑 目录 奶牛赛跑 题目描述 输入格式 输出格式 样例 样例输入#1 样例输出#1 题解 代码 题目描述 约翰有头奶牛,他为这些奶牛准备了一个周长为的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比 ...

  5. BZOJ4367 : [IOI2014]holiday假期

    设 $fl[i]$表示从$S$向左走,用了不超过$i$天且不回头的最大收益. $fr[i]$表示从$S$向右走,用了不超过$i$天且不回头的最大收益. $gl[i]$表示从$S$向左走,用了不超过$i ...

  6. [BZOJ4367][IOI2014]Holiday(决策单调性+分治+主席树)

    4367: [IOI2014]holiday假期 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 421  Solved: 128[Submit][Sta ...

  7. Clone Graph leetcode java(DFS and BFS 基础)

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  8. react+react-router+react-redux+nodejs+mongodb项目

    一个实际项目(OA系统)中的部分功能.这个demo中引入了数据库,数据库使用了mongodb.安装mongodb才能运行完整的功能.要看完整的项目可以移步我的github 技术栈 React v15. ...

  9. [EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]

    题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j ...

随机推荐

  1. SPSS-判别分析

    判别分析 判别分析是一种有效的对个案进行分类分析的方法.和聚类分析不同的是,判别分析时组别的特征已知. 定义:判别分析先根据已知类别的事物的性质,利用某种技术建立函数式,然后对未知类别的新事物进 行判 ...

  2. ftp 传输问题

    服务器配置ftp站点后,客户端机器可以下载但不能上传文件? 今天从公网的服务器连接本地内网的FTP server copy文件时,系统老是提示227 Entering Passive Mode (xx ...

  3. 内存占用过高 kill 调整mysql内存占用

    通过 /var/log/messages  查看  被系统kill掉的进程   如果是自己崩溃会产生 hs_err_ 修改mysql  my.cnf    innodb_buffer_pool_siz ...

  4. php请求php

    function post2($url, $data){//file_get_content $postdata = http_build_query( $data ); $opts = array( ...

  5. async.waterfall

    [async.waterfall] if any of the tasks pass an error to their own callback, the next function is not ...

  6. div 绑定keyup

    参考 https://www.cnblogs.com/Struts-pring/p/4290740.html <div tabindex="-1" onkeyup=" ...

  7. DRF的权限和频率

    DRF的权限 权限组件源码 权限和频率以及版本认证都是在initial方法里初始化的 我们的权限类一定要有has_permission方法~否则就会抛出异常~~这也是框架给我提供的钩子~~ 在rest ...

  8. jQuery Grid高级指南

    上周以为已经把jqgrid 表格这部分已经搞得差不多了,没想到在实际用的时候,出现了不少问题,重新把这块知识整理一下. 问题一:设置表格的自动刷新 问题的原因: 使用表格自带的增删改查的功能,编辑完数 ...

  9. classLoader.getResourceAsStream中文乱码

    一直用一个方法安然无恙,今天在新项目中突然乱码了,原代码: ClassLoader classLoader = Thread.currentThread().getContextClassLoader ...

  10. pyinstller的安装

    下载:http://www.pyinstaller.org/ 解压到目录 切换到python目录 执行命令: python.exe D:\Download\PyInstaller-2.1\setup. ...