[语言月赛 202312] 颜料覆盖
题目背景
一副精美的画作可能需要很多次重复的颜料涂抹。涂抹的一层层颜料会产生许多覆盖。这一次我们将这一个情景简化后交给了你,希望你能够解开颜料覆盖的奥秘。
题目描述
给定一个 nnn 行 mmm 列的矩阵 aaa。每一行代表画作的一块区域。每一行从前往后分别代表 mmm 次绘画。
用 ai,ja _ {i, j}ai,j 代表序列中第 iii 行第 jjj 列的元素,ai,ja _ {i, j}ai,j 代表区域 iii 在第 jjj 次绘画中被涂抹的颜料强度。如果 ai,j=0a _ {i, j} = 0ai,j=0,那么代表区域 iii 在第 jjj 次中未被涂抹。
现在,对于每个区域,你需要找出涂抹强度最大的一次是哪一次。同时,你需要找出,在这一次之前,有多少次涂抹(不计算未涂抹的情况)强度比这一次小。
保证对于某个区域,不会出现两次涂抹强度相同且最大。
输入格式
输入共 n+1n + 1n+1 行。
第一行为两个整数 n,mn, mn,m,分别代表区域数和绘画次数。
接下来 nnn 行,每行 mmm 个整数,代表矩阵 aaa。
输出格式
输出共 nnn 行,每行两个整数,分别代表涂抹强度最大的一次是哪一次,和在这一次之前,有多少次涂抹(不计算未涂抹的情况)强度比这一次小。
样例 #1
样例输入 #1
3 5
0 1 0 3 2
0 0 1 0 0
1 1 3 4 5
样例输出 #1
4 1
3 0
5 4
提示说明
样例 1 解释
- 第一行(第一个区域)中,第 4\color{red}44 次涂抹的强度最大,为 333。在第 444 次之前,有且仅有第 222 次这一次「有涂抹(不为 000)」且「强度比第 444 次小」,故答案为
4 1
。 - 第二行(第二个区域)中,第 3\color{red}33 次涂抹的强度最大,为 111。在第 333 次之前,该区域没有被涂抹过(即第 333 次之前全为 000),故答案为
3 0
。 - 第三行(第三个区域)中,第 5\color{red}55 次涂抹的强度最大,为 555。在第 555 次之前,有 4\color{red}44 次「有涂抹」且「强度比第 555 次小」,因此答案为
5 4
。
数据规模与约定
对于 100%100\%100% 的数据,保证 1≤n,m≤1061 \leq n, m \leq 10 ^ 61≤n,m≤106,1≤n×m≤1061 \leq n \times m \leq 10 ^ 61≤n×m≤106,0≤ai,j≤1090 \leq a _ {i, j} \leq 10 ^ 90≤ai,j≤109。
测试点 | nnn | mmm | 特殊性质 |
---|---|---|---|
111 | =1= 1=1 | =1= 1=1 | 无 |
2∼32 \sim 32∼3 | ≤10\leq 10≤10 | ≤10\leq 10≤10 | 无 |
4∼64 \sim 64∼6 | ≤103\leq 10 ^ 3≤103 | ≤103\leq 10 ^ 3≤103 | 无 |
$7 $ | ≤1\leq 1≤1 | ≤106\leq 10 ^ 6≤106 | 无 |
888 | ≤106\leq 10 ^ 6≤106 | ≤1\leq 1≤1 | 无 |
9∼109 \sim 109∼10 | ≤106\leq 10 ^ 6≤106 | ≤106\leq 10 ^ 6≤106 | 每一行的第一个元素是这一行的最大值 |
11∼1211 \sim 1211∼12 | ≤106\leq 10 ^ 6≤106 | ≤106\leq 10 ^ 6≤106 | 每一行的最后一个元素是这一行的最大值 |
13∼1413 \sim 1413∼14 | ≤106\leq 10 ^ 6≤106 | ≤106\leq 10 ^ 6≤106 | 每一行有且仅有一个非 000 元素 |
15∼2015 \sim 2015∼20 | ≤106\leq 10 ^ 6≤106 | ≤106\leq 10 ^ 6≤106 | 无 |
保证在矩阵的某一行中不存在两个元素相同且最大,保证不存在某一行全部为 000。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,m;
cin>>n>>m;
ll a,maxl,op,k,cnt;
while(n--)
{
maxl=op=k=-1;
for(ll j=1;j<=m;j++)
{
cin>>a;
if(a) k++;
if(maxl<a)
{
maxl=a;
op=j;
cnt=k;
}
}
cout<<op<<" "<<cnt<<endl;
}
return 0;
}