二维前缀和70分求助
查看原帖
二维前缀和70分求助
530180
KingPowers楼主2022/7/16 19:42
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x[1005],tx[1005],y[1005],ty[1005],sum[1005][1005],ans=0x7fffffff;
signed main()
{
	scanf("%lld",&n);
	for(int i=1;i<=n;i++) scanf("%lld%lld",&x[i],&y[i]),tx[i]=x[i],ty[i]=y[i];
	sort(tx+1,tx+n+1);
	int len1=unique(tx+1,tx+n+1)-tx-1;
	for(int i=1;i<=n;i++) x[i]=lower_bound(tx+1,tx+len1+1,x[i])-tx;
	sort(ty+1,ty+n+1); 
	int len2=unique(ty+1,ty+n+1)-ty-1;
	for(int i=1;i<=n;i++) y[i]=lower_bound(ty+1,ty+len1+1,y[i])-ty;
	for(int i=1;i<=n;i++) sum[x[i]][y[i]]++;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			sum[i][j]=sum[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
	for(int i=2;i<=n;i+=2)
		for(int j=2;j<=n;j+=2)
		{
			int A,B,C,D;
			A=sum[i-1][j-1],B=sum[i-1][n]-sum[i-1][j],
			C=sum[n][j-1]-sum[i][j-1],D=sum[n][n]-sum[n][j]-sum[i][n]+sum[i][j];
			ans=min(max(max(A,B),max(C,D)),ans);
		}
	printf("%lld",ans);
}
2022/7/16 19:42
加载中...