样例都过不了,而且不知道哪里错了
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct attack
{
int x1;
int x2;
int y1;
int y2;
int z1;
int z2;
int value;
}at[10000010];
int A,B,C,m;
int s[10000010];
int b[10000010];
int xyz(int x, int y, int z)
{
return ((x-1)*B+(y-1))*C+(z-1)+1;
}
bool check(int mid)
{
memset(b,0,sizeof(b));
for(int i=1;i<=mid;i++)
{
b[xyz(at[i].x1,at[i].y1,at[i].z1)]+=at[i].value;
b[xyz(at[i].x2+1,at[i].y1,at[i].z1)]-=at[i].value;
b[xyz(at[i].x1,at[i].y2+1,at[i].z1)]-=at[i].value;
b[xyz(at[i].x1,at[i].y1,at[i].z2+1)]-=at[i].value;
b[xyz(at[i].x2+1,at[i].y2+1,at[i].z1)]+=at[i].value;
b[xyz(at[i].x1,at[i].y2+1,at[i].z2+1)]+=at[i].value;
b[xyz(at[i].x2+1,at[i].y1,at[i].z2+1)]+=at[i].value;
b[xyz(at[i].x2+1,at[i].y2+1,at[i].z2+1)]-=at[i].value;
}
for(int i=1;i<=A;i++)
{
for(int j=1;j<=B;j++)
{
for(int k=1;k<=C;k++)
{
b[xyz(i,j,k)]+=b[xyz(i-1,j,k)]+b[xyz(i,j-1,k)]+b[xyz(i,j,k-1)]-b[xyz(i-1,j-1,k)]-b[xyz(i-1,j,k-1)]-b[xyz(i,j-1,k-1)]+b[xyz(i-1,j-1,k-1)];
if(b[xyz(i,j,k)]>s[xyz(i,j,k)]) return true;
}
}
}
return false;
}
int main()
{
scanf("%d%d%d%d",&A,&B,&C,&m);
for(int i=1;i<=A;i++)
{
for(int j=1;j<=B;j++)
{
for(int k=1;k<=C;k++)
{
scanf("%d",&s[xyz(i,j,k)]);
}
}
}
for(int i=1;i<=m;i++) scanf("%d%d%d%d%d%d%d",&at[i].x1,&at[i].x2,&at[i].y1,&at[i].y2,&at[i].z1,&at[i].z2,&at[i].value);
int l=1,r=m;
while(l<r)
{
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}