请问如何避免MLE
  • 板块学术版
  • 楼主halehu
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/10/29 22:13
  • 上次更新2023/10/27 05:01:30
查看原帖
请问如何避免MLE
365777
halehu楼主2022/10/29 22:13

rt,同时问一下爆空间可以申诉吗?

s组t2,我因为贪把N开到了2000,空间成了640MB(我不太会算空间),改成1000就60分了((;´༎ຶД༎ຶ`) 哭死)

代码放这里了

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2005;//改成1005就60了的地方
LL a[N],b[N],n,m,q,c[N][N],d[N][N][20],l1,r1,l2,r2;
int main(){
	//freopen("game.in","r",stdin);
	//freopen("game.out","w",stdout);
	cin>>n>>m>>q;
	for(register int i=1;i<=n;i++) cin>>a[i];
	for(register int i=1;i<=m;i++) cin>>b[i];
	for(register int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
	        c[i][j] = a[i] * b[j];
	memset(d,127/3,sizeof d);
	for(register int i=1;i<=n;i++){
		for(register int j=1;j<=m;j++) d[i][j][0] = c[i][j];
		for(register int j=1;(1<<j)<=m;j++)
		    for(register int k=1;k<=m-(1<<j)+1;k++)
		        d[i][k][j] = min(d[i][k][j-1],d[i][k+(1<<(j-1))][j-1]);
	}
	for(register int i=1;i<=q;i++){
		cin>>l1>>r1>>l2>>r2;
		LL sum = -1e18;
		for(register int j=l1;j<=r1;j++){
			LL ans = 1e18,k = l2;
			while(k <= r2){
				LL len = log2(r2 - k + 1);
				ans = min(ans,d[j][k][len]);
				k += (1 << len);
			}
			sum = max(sum,ans);
		}
		printf("%lld\n",sum);
	}
	return 0;
}
2022/10/29 22:13
加载中...