题目描述
现在有一块很大的草原,这个草原分成了 n 行 m 列。 在这块草原的天空中,飘着 k 个气球。第 i 个气球,位置在第 xi 行第 yi 列上空,距离地面高度 hi,气球的颜色为 ci。
从一个位置向上看,只能看到这个位置正上方的,距离地面最近的气球。小明想知道,从每个位置向上看,能看到的气球的颜色分别是什么。如果这个位置上空没有气球,则输出 00。
输入格式
第一行,包括三个整数n,m,k,表示草原大小为 n 行 m 列,天空中有 k 个气球。
接下来的 k 行,每行包括四个整数:xi,yi,hi,ci,表示第 i 个气球,位置在第 xi 行第 yi 列上空,距离地面高度 hi,气球的颜色为 ci。
输出格式
共包含 n 行,每行 m 个数字。其中第 i 行第 j 个数字表示从这个位置向上看能看到的气球的颜色。如果这个位置上空没有气球,则输出 00。
输入输出样例
输入 #1
2 2 5 2 1 4 4 1 2 8 9 1 2 9 4 1 1 8 3 2 1 9 3
输出 #1
3 9 4 0
输入 #2
3 3 5 1 1 6 7 2 2 7 5 3 1 8 3 2 2 6 1 2 1 3 4
输出 #2
7 0 0 4 1 0 3 0 0
说明/提示
样例 1 解释
- 第一行第一列上空只有一个气球,颜色为 33;
- 第一行第二列上空高度最低的气球高度为 88,颜色为 99;
- 第二行第一列上空高度最低的气球高度为 44,颜色为 44;
- 第二行第二列上空没有气球。
数据规模与约定
对于 100%100% 的数据,1≤n,m≤103,1≤k≤10^5,1≤hi,ci≤10^9。保证不存在两个气球的位置(xi,yi,hi)完全相同。
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,a[1005][1005],x,y,h,c,hw[1005][1005];
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=k;i++)
{
scanf("%d%d%d%d",&x,&y,&h,&c);
if(!a[x][y]||h<hw[x][y])
{
a[x][y]=c;
hw[x][y]=h;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)printf("%d ",a[i][j]);
printf("\n");
}
}