Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35322 baka24 【S】T1 C++ 解答错误 0 709 MS 188132 KB 1812 2024-12-08 16:19:19

Tests(0/15):


#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=5010; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} int n,m,ans,k,S,num,a[MAXN][MAXN]; struct node{ int a,b,c,d; }p[MAXN]; bool cmpa(node x,node y){return x.a!=y.a?x.a<y.a:x.b<y.b;} bool cmpb(node x,node y){return x.b<y.b;} bool cmpc(node x,node y){return x.c!=y.c?x.c<y.c:x.d<y.d;} struct treearray{ int C[MAXN]; int lb(int x){return x&(-x);} void upd(int x,int y){ for(int i=x;i<=n+m;i+=lb(i))C[i]+=y;} int qry(int x){ // cout<<x<<endl; x=min(x,n+m); int res=0;for(int i=x;i>=1;i-=lb(i))res+=C[i];return res;} }T; void slv(){ n=read(),m=read(),k=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)S=max(S,a[i][j]=read()); for(int i=1;i<=S;i++)p[i].a=p[i].c=1e9; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) p[a[i][j]].a=min(p[a[i][j]].a,i),p[a[i][j]].b=max(p[a[i][j]].b,i),p[a[i][j]].c=min(p[a[i][j]].c,j),p[a[i][j]].d=max(p[a[i][j]].d,j); for(int i=1;i<=S;i++)while(i<=S&&!p[i].d)swap(p[i],p[S]),S--; sort(p+1,p+S+1,cmpa); for(int i=1;i<=S;i++){ int L=p[i].a,R=0; sort(p+i,p+S+1,cmpb); for(int j=i;j<=S;j++){R=p[j].b; int len=k/(R-L+1); for(int o=j-1;o>=i;o--)if(p[o].c>p[o+1].c)swap(p[o],p[o+1]); for(int o=i;o<=j;o++)T.upd(p[o].d,1); for(int o=i;o<=j;o++){ ans=max(ans,T.qry(p[o].c+len-1)); T.upd(p[o].d,-1); } } sort(p+i,p+S+1,cmpa); } cout<<ans<<" "; printf("%lld",S-ans); } signed main(){ slv(); return 0; }


测评信息: