求调ABC E
  • 板块灌水区
  • 楼主Lydia_qwq
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/20 21:44
  • 上次更新2024/7/21 01:18:03
查看原帖
求调ABC E
559581
Lydia_qwq楼主2024/7/20 21:44

调了0.5h/kk

#include<bits/stdc++.h>
using namespace std;
template<typename T>
inline void read(T &x)
{
	x=0;char ch=getchar();bool f=0;
	while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	if(f)x=-x;                                       
}
template<typename T,typename ...Args>
inline void read(T &tmp,Args &...tmps){read(tmp);read(tmps...);}
const int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
int h,w,y,mn,ans,qwq,ct[1005][1005],a[1005][1005],dp[1005][1005],cnt[100005],lr[1005][1005];
void update(int x,int y)
{
	if(ct[x][y]==qwq)return;
	ct[x][y]++;
	mn=0x3f3f3f3f;
	for(int i=0;i<4;i++)if(lr[x+dx[i]][y+dy[i]]<=lr[x][y])mn=min(mn,dp[x+dx[i]][y+dy[i]]);
	mn=max(mn,a[x][y]);
	dp[x][y]=mn;
	if(qwq==20&&mn<=(::y))cnt[mn]++;
}
int main()
{
	read(h,w,y);
	for(int i=1;i<=h;i++)for(int j=1;j<=w;j++)
	{
		read(a[i][j]);
		lr[i][j]=max(min(i,h-i+1),min(j,w-j+1));
	}
	for(qwq=1;qwq<=20;qwq++)for(int i=1;i<=min(h,w);i++)
	{
		for(int j=1;j<=h;j++){update(j,i);update(j,w-i+1);}
		for(int j=1;j<=w;j++){update(i,j);update(h-i+1,j);}
	}
	for(int i=1;i<=y;i++)
	{
		ans+=cnt[i];
		cout<<h*w-ans<<'\n';
	}
}
2024/7/20 21:44
加载中...