jzoj1371-假期【RMQ】
生活随笔
收集整理的這篇文章主要介紹了
jzoj1371-假期【RMQ】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
上一篇RMQ博客:http://blog.csdn.net/mr_wuyongcong/article/details/79253383
正題
題目
要給奶牛放假,每天有一定的快樂值(有可能是負數),假期不能小于p天或大于q天,求最大快樂值
輸入
第一行:N,P,Q.
第二行:N個數字,中間用一個空格隔開。
輸出
一個整數,奶牛們能獲得的最大享受指數。
樣例輸入
5 2 4
-9 -4 -3 8 -6
樣例輸出
5
解題思路
從i天放假q天的最大值其實就包括了從p到q-1的最大值,所以我們只需要求地q-1的就好了,這里用RMQ加前綴和求。
代碼
#include<cstdio> #include<cmath> #include<iostream> using namespace std; int n,p,q; long long k,s; long long f[100001][21],maxs;//一定要long long long long re(long long x,long long y) {long long z=(long long)(log(y-x+1)/log(2));return max(f[x][z],f[y+1-(1<<z)][z]); }//求x到y的最大值 int main() {scanf("%d%d%d",&n,&p,&q);for (int i=1;i<=n;i++){scanf("%lld",&k);//輸入s+=k;//前綴和f[i][0]=s;//初始化}for (int j=1;(1<<j)<=n;j++)for (int i=1;i+(1<<j)-1<=n;i++){f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);}//RMQ不解釋,詳見我上篇博客(前言有地址)maxs=-1*1e11;//小for (int i=1;i<=n-p+1;i++){maxs=max(maxs,re(i+p-1,min(n,q+i-1))-f[i-1][0]);//求最大值}printf("%lld",maxs); }總結
以上是生活随笔為你收集整理的jzoj1371-假期【RMQ】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无线路由器中的WPA2如何配置如何设置无
- 下一篇: 旧电脑如何提炼出黄金电脑主机里面的黄金如