社区讨论

与题解一思路一致但一直WA,求dalao调

P6648 [CCC 2019] Triangle: The Data Structure参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjssfoo
此快照首次捕获于
2025/11/04 07:55
4 个月前
此快照最后确认于
2025/11/04 07:55
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e3+2,MAXI=3;
int n,p,m[MAXN][MAXN][MAXI];
long long ans=0;
int max_(int x,int y){
	int L=log2(p),l=L%3;
	int z;
	z=max(m[x][y][l],max(m[x-p+(1<<L)][y][l],m[x][y+p-(1<<L)][l]));
	if(z>0) z=max(z,max(m[x][y+(p/2-(1<<(L-1)))][l],max(m[x+p/2+(1<<(L-1))][y+(p/2-(1<<(L-1)))][l],m[x+p/2+(1<<(L-1))][y+(p/2-(1<<(L-1)))][l])));
	return z;
}
int main(){
	scanf("%d%d",&n,&p);
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=i;j++)
	        scanf("%d",&m[i][j][0]);
	int L=log2(p);
	for(int k=1;k<=L;k++){
		int K=k%3;
		for(int i=(1<<k);i<=n;i++){
	    	for(int j=1;j<=i;j++)
	            if(j+(1<<k)-1<=i){
	            	m[i][j][K]=max(m[i][j][(K+2)%3],max(m[i-(1<<(k-1))][j][(K+2)%3],m[i][j+(1<<(k-1))][(K+2)%3]));
	            	if(k>1) m[i][j][K]=max(m[i][j][K],max(m[i][j+(1<<(k-2))][(K+2)%3],max(m[i-(1<<(k-2))][j][(K+2)%3],m[i-(1<<(k-2))][j+(1<<(k-2))][(K+2)%3])));
	            //	printf("%d ",m[i][j][K]);
				}
		//	printf("\n");
		}
	}
	    
	for(int i=p;i<=n;i++)
	    for(int j=1;j<=i;j++)
	        if(j+p-1<=i)
	        	ans+=max_(i,j);
	printf("%lld",ans);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...