二分或优先队列
查看原帖
二分或优先队列
533671
shujia楼主2022/7/26 20:08
#include <bits/stdc++.h>
using namespace std;
int n,m,ll,rr,ans,ansx,ansy;
long long sum[4000010],a;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		scanf("%d",&a);
		sum[i]=sum[i-1]+a;
	}
	for(int i=1;i<=n;i++){
		ll=i;
		rr=n;
		while(ll<=rr){
			int mid=(ll+rr)/2;
			if(sum[mid]-sum[i-1]>m)
				rr=mid-1;
			else ll=mid+1;
		}
		if(sum[rr]-sum[i-1]<=m)
			if(sum[rr]-sum[i-1]>ans){
				ansx=i;
				ansy=rr;
				ans=sum[rr]-sum[i-1];
			}
	}
	printf("%d %d %d",ansx,ansy,ans);
	return 0;
}
2022/7/26 20:08
加载中...