【JZOJ A组】逛公园

阅读: 评论:0

【JZOJ A组】逛公园

【JZOJ A组】逛公园

Description

策策由于在noip2017考试当天去逛公园了,没能出现在考场上,转眼到了noip2018,策策的公园也悄然转变,策策能否克服诱惑,成功坐在考场上呢?
问题描述
策策同学特别喜欢逛公园,公园可以看做有n个景点的序列,每个景点会给策策带来di 的愉悦度,策策初始有x0 的愉悦度,然而愉悦度也是有上限的,他在每个景点的愉悦度上限为li ,策策想要从 l 到 r这一段景点中选择一段景点参观(从这一段的左端点逛到这一段的右端点),策策想知道他最终的愉悦度的最大值是多少,你能帮帮他吗?(区间可以为空,也就是说答案最小为x0 )

Input

第一行两个数n,q 表示景点序列长度 和 询问个数
第二行n个数 表示di
第三行n个数 表示li
接下来q行,每行3个数:
表示 l ,r ,x0
下标均从1开始

Output

共q行,每行1个数表示愉悦度的最大值

Sample Input

6 3
0 5 3 2 0 4
8 10 8 1 9 9
1 3 9
2 6 3
3 4 0

Sample Output

10
8
3

样例说明
询问1 初始愉悦度9 只逛第2个公园 9+5=14 大于l2 ans=10
询问2 初始愉悦度3 从2逛到3 3+5+3=11 大于l3 ans=8
询问3 初始愉悦度0 只逛第3个公园 ans=3

Data Constraint

思路

这题满分有点难,我选择85暴力

这东西很像子段最大和,加一个优化就可以拿到85的好成绩

代码

#pragma GCC optimize(3)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,q;
struct A
{int x,y;
}a[40077];
int main()
{freopen("park.in","r",stdin); freopen("park.out","w",stdout);scanf("%d%d",&n,&q);for(int i=1; i<=n; i++) scanf("%d",&a[i].x);for(int i=1; i<=n; i++) scanf("%d",&a[i].y);while(q--){int l,r;long long s=0,ans=0,x;scanf("%d%d%lld",&l,&r,&x); ans=s=x;for(int i=l; i<=r; i++){s=max(x,min(s+1ll*a[i].x,1ll*a[i].y)); ans=max(ans,s);}printf("%lldn",ans);}
}

本文发布于:2024-02-04 15:43:04,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170710818556792.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:逛公园   JZOJ
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23