CodeForces - 1137A(Skyscrapers)
题意:给你一个矩阵,对于每个点,把它所在一行一列分离出来,在行列各自相对顺序不改变的情况下离散化(比如 ,则离散化
),求离散化后的最大值。
分析:题目蛮长的,看明白了就是一个离散化。
代码:
#include
#include
#include
using namespace std;const int N = 1005;int s[N][N];
int r[N][N];
int c[N][N];
int tmpr[N];
int tmpc[N];int n,m;int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&s[i][j]);r[i][j]=s[i][j];c[j][i]=s[i][j];}for(int i=1;i<=n;i++){sort(r[i]+1,r[i]+m+1);tmpr[i]=unique(r[i]+1,r[i]+m+1)-r[i]-1;}for(int i=1;i<=m;i++){sort(c[i]+1,c[i]+n+1);tmpc[i]=unique(c[i]+1,c[i]+n+1)-c[i]-1;}int a,b; for(int i=1;i<=n;i++){for(int j=1;j<=m;j++ ){a=lower_bound(r[i],r[i]+tmpr[i],s[i][j])-r[i];b=lower_bound(c[j],c[j]+tmpc[j],s[i][j])-c[j];printf("%d ",max(a,b)+max(tmpr[i]-a,tmpc[j]-b));// ans=max(行中比这个点小的个数,列中比这个点小的个数)+1// +max(行中比这个点大的个数,列中比这个点大的个数)}puts("");}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
