Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35267 LYLAKIOI 【S】T1 C++ 通过 100 749 MS 95776 KB 2824 2024-12-08 14:18:53

Tests(15/15):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back typedef long long ll; using namespace std; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,S,c[5005][5005]; int mnx[505],mxx[505],mny[505],mxy[505]; pi A[505],Q[505]; struct nd { int xl,xr,yl,yr,yr2; }d[505]; int L; int vis1[5005],vis2[5005]; struct BIT { int t[5005]; int lb(int x){return x&(-x);} void upd(int x,int v){for(;x<=500;x+=lb(x))t[x]+=v;} int qry(int x){int res=0;for(;x;x-=lb(x))res+=t[x];return res;} }T; void slv(){ n=read(),m=read(),S=read(); up(i,1,500)mnx[i]=1e9,mxx[i]=-1e9,mny[i]=1e9,mxy[i]=-1e9; up(i,1,n)up(j,1,m)c[i][j]=read(),mnx[c[i][j]]=min(mnx[c[i][j]],i),mxx[c[i][j]]=max(mxx[c[i][j]],i),mny[c[i][j]]=min(mny[c[i][j]],j),mxy[c[i][j]]=max(mxy[c[i][j]],j); up(i,1,500)if(mnx[i]<=n)d[++L]=(nd){mnx[i],mxx[i],mny[i],mxy[i]}; int res=0; up(i,1,L)vis1[d[i].xl]=1,vis2[d[i].yl]=1; vector<int>vec; up(i,1,L)vec.p_b(d[i].yr); sort(vec.begin(),vec.end()); up(i,1,L)d[i].yr2=lower_bound(vec.begin(),vec.end(),d[i].yr)-vec.begin()+1; up(i,1,n)if(vis1[i])up(j,1,n)if(vis2[j]){ //vector<pi>A,Q; int tp1=0,tp2=0; up(k,1,L)if(d[k].xl>=i&&d[k].yl>=j)A[tp1++]=m_p(d[k].xr,d[k].yr2)/*A.p_b(m_p(d[k].xr,d[k].yr))*/; //sort(A.begin(),A.end()); if(tp1<=res)continue; sort(A,A+tp1); up(k,1,L)if(d[k].xl>=i&&j<=d[k].yl&&S>=d[k].yr-j+1) Q[tp2++]=m_p(min(S/(d[k].yr-j+1)+i-1,n),d[k].yr2); //Q.p_b(m_p(min(S/(d[k].yr-j+1)+i-1,n),d[k].yr)); //sort(Q.begin(),Q.end()); sort(Q,Q+tp2); tp2=unique(Q,Q+tp2)-Q; int p=0,q=0; while(p<tp2){ while(q<tp1&&A[q].p1<=Q[p].p1)T.upd(A[q].p2,1),++q; res=max(res,T.qry(Q[p].p2));p++; } up(i,0,q-1)T.upd(A[i].p2,-1); } /*up(i,1,L){ up(j,1,L)if(d[j].xl>=d[i].xl){ up(k,1,L)if(d[j].yr<=d[k].yr&&d[k].xl>=d[i].xl){ int xl=d[i].xl,yl=d[j].yl,yr=d[k].yr; int xr=S/(yr-yl+1)+xl-1; if(xl>xr)continue; int ct=0; up(l,1,L)if(d[l].xl>=xl&&d[l].xr<=xr&&d[l].yl>=yl&&d[l].yr<=yr)ct++; res=max(res,ct); } } }*/ cout<<L-res; } int main(){ //freopen("disinfect.in","r",stdin); //freopen("disinfect.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }


测评信息: