#include<bits/stdc++.h>
using namespace std;
int a,b,c,q,val[10000010],d[10000010],l,r,mid,ans,lx[10000010],rx[10000010],ly[10000010],ry[10000010],lz[10000010],rz[10000010],v[10000010];
int calc(int x,int y,int z){
return ((x-1)*b+(y-1))*c+(z-1)+1;
}
bool check(int lim){
for(int i=0;i<=a*b*c;i++){
d[i]=0;
}
for(int i=1;i<=lim;i++){
d[calc(lx[i],ly[i],lz[i])]+=v[i];
d[calc(rx[i]+1,ly[i],lz[i])]-=v[i];
d[calc(lx[i],ry[i]+1,lz[i])]-=v[i];
d[calc(lx[i],ly[i],rz[i]+1)]-=v[i];
d[calc(rx[i]+1,ry[i]+1,lz[i])]+=v[i];
d[calc(rx[i]+1,ly[i],rz[i]+1)]+=v[i];
d[calc(lx[i],ry[i]+1,rz[i]+1)]+=v[i];
d[calc(rx[i]+1,ry[i]+1,rz[i]+1)]-=v[i];
}
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
for(int k=1;k<=c;k++){
d[calc(i,j,k)]+=d[calc(i-1,j,k)]+d[calc(i,j-1,k)]+d[calc(i,j,k-1)]-d[calc(i-1,j-1,k)]-d[calc(i-1,j,k-1)]-d[calc(i,j-1,k-1)]+d[calc(i-1,j-1,k-1)];
if(d[calc(i,j,k)]>val[calc(i,j,k)]){
return true;
}
}
}
}
return false;
}
int main(){
scanf("%d%d%d%d",&a,&b,&c,&q);
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
for(int k=1;k<=c;k++){
scanf("%lld",&val[calc(i,j,k)]);
}
}
}
for(int i=1;i<=q;i++){
scanf("%d%d%d%d%d%d%d",&lx[i],&rx[i],&ly[i],&ry[i],&lz[i],&rz[i],&v[i]);
}
l=1;
r=q;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
ans=mid;
r=mid-1;
}else{
l=mid+1;
}
}
printf("%d",ans);
return 0;
}
这份代码样例输出 0 但是 AC 。请求好心人解答。