1 条题解
-
1
这道题一眼区间
(这不是很明显吗?)可以定义一个 数组储存 数组的前缀和,那么 数组第 项至第 项的和 = 。
不过考虑到数据范围 ,所以利用二分优化。
上代码!
#include<iostream> using namespace std; const int N=4000010; int a[N]; long long b[N]; int L,R,sum; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; b[i]=b[i-1]+a[i];//b数组存a数组的前缀和 } for(int i=1;i<=n;i++)//优化后只需枚举i的值 { //二分确定最优的j int l=i,r=n,mid; while(l<=r) { mid=(l+r)>>1; if(b[mid]-b[i-1]>m) r=mid-1; else l=mid+1; } int t=b[r]-b[i-1]; if(t>sum) { //更新sum的值 sum=t; L=i; R=r; } } cout<<L<<' '<<R<<' '<<sum<<endl; return 0; }
信息
- ID
- 2304
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者