线段树TLE求调P1714
  • 板块学术版
  • 楼主ZYStream
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/22 19:38
  • 上次更新2025/1/22 22:02:45
查看原帖
线段树TLE求调P1714
1419923
ZYStream楼主2025/1/22 19:38

P1714 切蛋糕

#include<cstdio>
#include<algorithm>
using namespace std;

typedef long long ll;
const ll N=1e7;

ll n,m,a[N],tr[N];

void build(ll id,ll s,ll t){
	if (s==t){
		tr[id]=a[s];
		return ;
	}
	ll mid=s+t>>1;
	build(id<<1,s,mid);
	build(id<<1|1,mid+1,t);
	tr[id]=tr[id<<1]+tr[id<<1|1];
	return ;
}

ll getsum(ll id,ll l,ll r,ll s,ll t){
	if (l<=s&&t<=r) return tr[id];
	ll mid=s+t>>1;
	ll sum=0;
	if (l<=mid) sum+=getsum(id<<1,l,r,s,mid);
	if (r>mid) sum+=getsum(id<<1|1,l,r,mid+1,t);
	return sum;
}

int main(){
	scanf("%lld%lld",&n,&m);
	for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
	build(1,1,n);
	ll ans=0;
	for (int i=1;i<=n;i++){
		for (int j=i;j<=min(i+m-1,n);j++){
			if (i==1&&j==1) ans=getsum(1,i,j,1,n);
//			printf("[%lld,%lld]:%lld\n",i,j,getsum(1,i,j,1,n));
			ans=max(ans,getsum(1,i,j,1,n));
		}
	}
	printf("%lld",ans);
}
2025/1/22 19:38
加载中...