听灌佬多(奇怪错误)
  • 板块灌水区
  • 楼主luoweiqi
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/18 09:23
  • 上次更新2024/10/18 09:32:34
查看原帖
听灌佬多(奇怪错误)
808529
luoweiqi楼主2024/10/18 09:23
using namespace std;
#define int long long
struct node
{
	int x1,x2,y1,y2,z1,z2,add;
}pro[7000100];
int n,m,l,q,a[7000100],qzh[7000100],cnt;
int id(int x,int y,int z)
{
	return x*(m+1)*(l+1)+y*(l+1)+z+1;
}
bool check(int x)
{
	for(int i=0;i<=n+1;i++)
	{
		for(int j=0;j<=m+1;j++)
		{
			for(int k=0;k<=l+1;k++)
			{
				qzh[id(i,j,k)]=0;
			}
		}
	}
	for(int i=1;i<=x;i++)
	{
		int x1=pro[i].x1,x2=pro[i].x2,y1=pro[i].y1;
		int y2=pro[i].y2,z1=pro[i].z1,z2=pro[i].z2;
		qzh[id(x1,y1,z1)]+=pro[i].add;
		qzh[id(x1,y1,z2+1)]-=pro[i].add;
		qzh[id(x1,y2+1,z1)]-=pro[i].add;
		qzh[id(x2+1,y1,z1)]-=pro[i].add;
		qzh[id(x1,y2+1,z2+1)]+=pro[i].add;
		qzh[id(x2+1,y1,z2+1)]+=pro[i].add;
		qzh[id(x2+1,y2+1,z1)]+=pro[i].add;
		qzh[id(x2+1,y2+1,z2+1)]-=pro[i].add;
	}
	for(int i=1;i<=n+1;i++)//n+1改为n
	{
		for(int j=1;j<=m+1;j++)//m+1改为m
		{
			for(int k=1;k<=l+1;k++)//l+1改为l
			{
				qzh[id(i,j,k)]+=qzh[id(i,j,k-1)];
				qzh[id(i,j,k)]+=qzh[id(i,j-1,k)];
				qzh[id(i,j,k)]+=qzh[id(i-1,j,k)];
				qzh[id(i,j,k)]-=qzh[id(i,j-1,k-1)];
				qzh[id(i,j,k)]-=qzh[id(i-1,j-1,k)];
				qzh[id(i,j,k)]-=qzh[id(i-1,j,k-1)];
				qzh[id(i,j,k)]+=qzh[id(i-1,j-1,k-1)];
				if(qzh[id(i,j,k)]>a[id(i,j,k)])
				{
					return false;
				}
			}
		}
	}
	return true;
}
signed main()
{
	cin>>n>>m>>l>>q;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int k=1;k<=l;k++)
				cin>>a[id(i,j,k)];
	for(int i=1;i<=q;i++)
	{
		cin>>pro[i].x1>>pro[i].x2>>pro[i].y1>>pro[i].y2>>pro[i].z1>>pro[i].z2>>pro[i].add;
	}
	int L=1,R=q,res=0;
	while(L<=R)
	{
		int mid=L+R>>1;
		if(check(mid))L=mid+1;
		else R=mid-1,res=mid;
	}
	cout<<res<<endl;
}

P8666三体攻击
如果将上面注释的地方改了的话就会错,十分不理解 (因为前缀和显然用不到越界的地方,可是实际上越界的地方却会对没有越界的地方产生影响)

2024/10/18 09:23
加载中...