牛客多校2 Fake Maxpooling

单调栈的模板题吧  没啥好讲的 被卡了一点空间 去掉了一个数组就过了

参考洛谷 理想的正方形

#include <bits/stdc++.h>
using namespace std;
const int N = 5002;
int n,m,k,FRONT,BACK;
int Q[N];
int X[N][N];
int a[N][N];
typedef long long ll;
int main(){
	scanf("%d%d%d",&n,&m,&k);
	for (int I=1;I<=n;I++)
		for (int i=1;i<=m;i++){
			a[I][i]=I*i/__gcd(I,i);
		}
	for (int I=1;I<=n;I++){
			FRONT=BACK=1;
			Q[1]=0;
			for (int i=1;i<=m;i++){
					while (a[I][i]>=a[I][Q[BACK]]&&FRONT<=BACK) BACK--;
					BACK++;Q[BACK]=i;
					while (i-Q[FRONT]>=k) FRONT++;
					if (i>=k) X[I][i-k+1]=a[I][Q[FRONT]];
				}
		}
	for (int I=1;I<=m-k+1;I++)
		{
			FRONT=BACK=1;
			Q[1]=0;
			for (int i=1;i<=n;i++)
				{
					while (X[i][I]>=X[Q[BACK]][I]&&FRONT<=BACK) BACK--;
					BACK++;Q[BACK]=i;
					while (i-Q[FRONT]>=k) FRONT++;
					if (i>=k) a[i-k+1][I]=X[Q[FRONT]][I];
				}
		}
    ll ans = 0;
	for (int I=1;I<=n-k+1;I++)
		for (int i=1;i<=m-k+1;i++)
			ans+=a[I][i];
	printf("%lld\n",ans);
	return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值