萌新请教为什么队列数组每次要全清
查看原帖
萌新请教为什么队列数组每次要全清
205049
Emplace_back楼主2022/10/13 10:19
第一个问题:

WA 60pts:

for(int i=1;i<=n;++i)
{
	q[1]=0;           //<=here(只清首项)
	l=0,r=1;
	d^=1;
	for(int j=1;j<=T;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
	}
	for(int j=T+1;j<=m;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
	for(int j=m+1;j<=m+T;++j)
	{
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
}

AC:

for(int i=1;i<=n;++i)
{
	memset(q,0,sizeof(q));//<=here(全部清空)
	l=0,r=1;
	d^=1;
	for(int j=1;j<=T;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
	}
	for(int j=T+1;j<=m;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
	for(int j=m+1;j<=m+T;++j)
	{
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
}

why? qwq

第二个问题:

经推算这份代码在T>m时可能ub,但为什么没寄?

2022/10/13 10:19
加载中...