排序+数据结构

将每一行(每一列)都排个序,并将原位置的在这一行(列)中的排行记录在一个数组里

注意,要将楼高度相同的元素看作一个元素

如 1 1 4 5 6 8 8,则排行是

     1 1 2 3 4 5 5

处理好后,枚举每一个十字路口,

若当前的处在的行的排行大于列的排行,则当前这个元素之后的列中元素应以行的排行开始依次递增,

若当前的处在的行的排行小于列的排行,则当前这个元素之后的行中元素应以列的排行开始依次递增,

注意,若当前的处在的行的排行等于列的排行时,则要从如上两个方面同时考虑,取最大值。

#include <bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010],hh[1010][1010],ll[1010][1010];
int mh[1500],ml[1500];
struct node
{
int wh,num;
};
vector <node> h[1010],l[1010];
bool cmp(node a,node b)
{
return a.num<b.num;//以高度降序排序
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
}
}
for (int i=1;i<=n;i++)//处理行的情况
{
node t;
for (int j=1;j<=m;j++)
{
t.num=a[i][j];
t.wh=j;
h[i].push_back(t);
}
sort(h[i].begin(),h[i].end(),cmp);
int how=0;
for (int j=0;j<m;j++)
{
if (j!=0)
{
if (h[i][j-1].num==h[i][j].num)
how++;//重复的有多少个
}
hh[i][h[i][j].wh]=j+1-how;//记录排行
}
mh[i]=m-how;//最大值
}
for (int j=1;j<=m;j++)//处理列的情况
{
node t;
for (int i=1;i<=n;i++)
{
t.num=a[i][j];
t.wh=i;
l[j].push_back(t);
}
sort(l[j].begin(),l[j].end(),cmp);
int how=0;
for (int i=0;i<n;i++)
{
if (i!=0)
{
if (l[j][i-1].num==l[j][i].num)
how++;
}
ll[l[j][i].wh][j]=i+1-how;
}
ml[j]=n-how;
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
int cha;
if (hh[i][j]==ll[i][j])//如上
{
int cha1;
cha1=mh[i]-hh[i][j];
cha=ml[j]-ll[i][j];
printf("%d ",max(max(hh[i][j]+cha,mh[i]),max(ll[i][j]+cha1,ml[j])));
}
else
if (hh[i][j]>ll[i][j])
{
cha=ml[j]-ll[i][j];
printf("%d ",max(hh[i][j]+cha,mh[i]));
}
else
if (hh[i][j]<ll[i][j])
{
cha=mh[i]-hh[i][j];
printf("%d ",max(ll[i][j]+cha,ml[j]));
}
}
printf("\n");
}
}

CF1137A/1138C Skyscrapers的更多相关文章

  1. uoj #111. 【APIO2015】Jakarta Skyscrapers

    #111. [APIO2015]Jakarta Skyscrapers 印尼首都雅加达市有 NN 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 00 到 N−1N−1.除了这 NN 座摩 ...

  2. Skyscrapers Aren’t Scalable

     Skyscrapers Aren't Scalable Michael Nygard WE oFTEn HEAR SoFTWARE EnginEERing CoMpAREd to building ...

  3. Skyscrapers Covered in Solar Pancels【太阳能电池板覆盖的摩天大楼】

    Skyscrapers Covered in Solar Panels An office tower on Miller Stree in Manchester is completely cove ...

  4. Codeforces Round #622(Div 2)C2. Skyscrapers (hard version)

    题目链接 : C2. Skyscrapers (hard version) 题目描述 : 与上一道题类似,只是数据范围变大, 5e5, 如果用我们原来的方法,铁定是超时的. 考察点 : 单调栈,贪心, ...

  5. Codeforces Round #622(Div 2) C1. Skyscrapers (easy version)

    题目链接: C1. Skyscrapers (easy version) 题目描述: 有一行数,使得整个序列满足 先递增在递减(或者只递增,或者只递减) ,每个位置上的数可以改变,但是最大不能超过原来 ...

  6. Codeforces Round #622 C2.Skyscrapers (hard version)

    This is a harder version of the problem. In this version n≤500000n≤500000 The outskirts of the capit ...

  7. Codeforces Round #622 (Div. 2) C1. Skyscrapers (easy version)(简单版本暴力)

    This is an easier version of the problem. In this version n≤1000n≤1000 The outskirts of the capital ...

  8. Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version)(单调栈,递推)

    Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version) 题意: 你是一名建筑工程师,现给出 n 幢建筑的预计建设高度,你想建成峰状, ...

  9. UOJ 216 Jakarta Skyscrapers

    http://uoj.ac/problem/216 题意:给定A,B,C,如果集合中有数i,j(i>j),那么集合就会增加i-j这个数,问有没有在初始集合为{A,B}400步内生成C的方案. 思 ...

随机推荐

  1. 联赛模拟测试10 C. 射手座之日

    题目描述 分析 方法一(线段树) 线段树维护的是以当前节点为左端点的区间的贡献 而区间的右端点则会从 \(1\) 到 \(n\) 逐渐右移 当我们把右端点从 \(i-1\) 的位置扩展到 \(i\) ...

  2. osu合集(期望dp)

    T1 EASY 我们设\(f_i\)表示到\(i\)的连续个数平方的期望. \(g_i\)表示到到\(i\)的连续个数的期望 在维护\(f_i\)的同时维护一下\(g_i\)就行了. 转移方程: \( ...

  3. CentOS 7安装docker和常用指令

    1.安装 yum -y install docker 2.启动 systemctl start docker // 启动 docker -v //查看版本号 systemctl stop docker ...

  4. intellij idea如何解决javax.servlet.http不存在

    正确的解决方法是:对项目名右键,选中Open Mudule Settings--选择左侧的Modules,选择右边的Dependencies--然后点击右侧边栏的绿色"+"号,点击 ...

  5. 重装Windows系统 入门详解 - 基础教程

    重装Windows系统 入门详解 - 基础教程 JERRY_Z. ~ 2020 / 10 / 13 转载请注明出处!️ 目录 重装Windows系统 入门详解 - 基础教程 一.说明 二.具体步骤 ( ...

  6. Cypress系列(63)- 使用 Custom Commands

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Custom Commands 自定义命 ...

  7. Mysql架构与内部模块-第一章

    Mysql作为大多数中小型企业的首选数据库,也可能是众多同僚接触的第一个数据库,其热门程度不言而喻,一些相对基础的知识本系列不做赘述,主要简述Mysql相关的进阶知识. 本章将由浅入深的讲解从连接My ...

  8. 【折半枚举+二分】POJ 3977 Subset

    题目内容 Vjudge链接 给你\(n\)个数,求出这\(n\)个数的一个非空子集,使子集中的数加和的绝对值最小,在此基础上子集中元素的个数应最小. 输入格式 输入含多组数据,每组数据有两行,第一行是 ...

  9. spring boot:用shardingjdbc实现多数据源的分库分表(shardingsphere 4.1.1/spring boot 2.3.1)

    一,shardingjdbc的用途 1,官方站介绍: Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈, 它由 JDBC.Proxy 和 Sidecar( ...

  10. CentOS 8 安装 oniguruma 和 oniguruma-devel

    一,oniguruma是什么? oniguruma是一个处理正则表达式的库,我们之所以需要安装它, 是因为在安装php7.4的过程中,mbstring的正则表达式处理功能对这个包有依赖性, 所以我们要 ...