RE求条
查看原帖
RE求条
1060672
wei2013楼主2024/7/4 21:04

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int a,b,c,m,l=1,r=1e6,ans,d[1000005],p[1000005],hp[1000005];
struct node{
	int la,ra,lb,rb,lc,rc,h;
}x[1000005];
int sub(int x,int y,int z){
	return max(0ll,((x-1)*b+(y-1))*c+(z-1)+1);
}
bool check(int mid){
	memset(d,0,sizeof(d));
	memset(p,0,sizeof(p));
	for(int i=1;i<=mid;i++){
		d[sub(x[i].la,x[i].lb,x[i].lc)]+=x[i].h;
		d[sub(x[i].ra+1,x[i].lb,x[i].lc)]-=x[i].h;
		d[sub(x[i].la,x[i].rb+1,x[i].lc)]-=x[i].h;
		d[sub(x[i].la,x[i].lb,x[i].rc+1)]-=x[i].h;
		d[sub(x[i].ra+1,x[i].rb+1,x[i].lc)]+=x[i].h;
		d[sub(x[i].ra+1,x[i].lb,x[i].rc+1)]+=x[i].h;
		d[sub(x[i].la,x[i].rb+1,x[i].rc+1)]+=x[i].h;
		d[sub(x[i].ra+1,x[i].rb+1,x[i].rc+1)]-=x[i].h;
	}
	for(int i=1;i<=a;i++){
		for(int j=1;j<=b;j++){
			for(int k=1;k<=c;k++){
				p[sub(i,j,k)]=p[sub(i-1,j,k)]+p[sub(i,j-1,k)]+p[sub(i,j,k-1)]-p[sub(i-1,j-1,k)]-p[sub(i-1,j,k-1)]-p[sub(i,j-1,k-1)]+p[sub(i-1,j-1,k-1)]+d[sub(i,j,k)];
				if(p[sub(i,j,k)]>hp[sub(i,j,k)]){
					return 1;
				}
			}
		}
	}
	return 0;
}
signed main(){
    cin>>a>>b>>c>>m;
    for(int i=1;i<=a*b*c;i++){
    	cin>>hp[i];
	}
    for(int i=1;i<=m;i++){
    	cin>>x[i].la>>x[i].ra>>x[i].lb>>x[i].rb>>x[i].lc>>x[i].rc>>x[i].h;
	}
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
			ans=mid;
		}else{
			l=mid+1;
		}
	}
	cout<<ans;
    return 0;
}
2024/7/4 21:04
加载中...