1+ package main .java .codechef ;
2+
3+ import java .io .BufferedReader ;
4+ import java .io .IOException ;
5+ import java .io .InputStreamReader ;
6+ import java .util .Arrays ;
7+
8+ public class SNELECT {
9+ public static void main (String [] args ) throws IOException {
10+ final BufferedReader in = new BufferedReader (new InputStreamReader (System .in ));
11+ final StringBuilder sb = new StringBuilder ();
12+ final Solver solver = new Solver ();
13+ for (int t = Integer .parseInt (in .readLine ()); t > 0 ; t --) {
14+ final String [] first = in .readLine ().split (" " );
15+ final int n = Integer .parseInt (first [0 ]), m = Integer .parseInt (first [1 ]);
16+ final int a [][] = new int [n ][m ];
17+ final int max [][] = new int [n * m ][2 ];
18+ int length = 0 , maximum = 0 ;
19+ for (int i = 0 ; i < n ; i ++) {
20+ final String [] row = in .readLine ().split (" " );
21+ for (int j = 0 ; j < m ; j ++) {
22+ a [i ][j ] = Integer .parseInt (row [j ]);
23+ if (maximum < a [i ][j ]) {
24+ maximum = a [i ][j ];
25+ length = 0 ;
26+ max [length ][0 ] = i ;
27+ max [length ][1 ] = j ;
28+ length ++;
29+ } else if (maximum == a [i ][j ]) {
30+ max [length ][0 ] = i ;
31+ max [length ][1 ] = j ;
32+ length ++;
33+ }
34+ }
35+ }
36+ sb .append (solver .solve (max , length , n , m )).append ('\n' );
37+ }
38+ System .out .println (sb .toString ());
39+ }
40+ }
41+
42+ class Solver {
43+
44+ public int solve (final int q [][], int rear , final int n , final int m ) {
45+ final boolean [][] visited = new boolean [n ][m ];
46+ for (int i = 0 ; i < rear ; i ++) {
47+ visited [q [i ][0 ]][q [i ][1 ]] = true ;
48+ }
49+ int count = 0 ;
50+ int front = 0 ;
51+ while (front < rear ) {
52+ final int element [] = q [front ++];
53+ final int row = element [0 ];
54+ final int col = element [1 ];
55+ final int oldRear = rear ;
56+ if (row > 0 ) {
57+ if (col > 0 ) {
58+ if (!visited [row - 1 ][col - 1 ]) {
59+ q [rear ++] = new int []{row - 1 , col - 1 };
60+ visited [row - 1 ][col - 1 ] = true ;
61+ }
62+ }
63+ if (!visited [row - 1 ][col ]) {
64+ q [rear ++] = new int []{row - 1 , col };
65+ visited [row - 1 ][col ] = true ;
66+ }
67+ if (col < m - 1 ) {
68+ if (!visited [row - 1 ][col + 1 ]) {
69+ q [rear ++] = new int []{row - 1 , col + 1 };
70+ visited [row - 1 ][col + 1 ] = true ;
71+ }
72+ }
73+ }
74+ if (row < n - 1 ) {
75+ if (col > 0 ) {
76+ if (!visited [row + 1 ][col - 1 ]) {
77+ q [rear ++] = new int []{row + 1 , col - 1 };
78+ visited [row + 1 ][col - 1 ] = true ;
79+ }
80+ }
81+ if (!visited [row + 1 ][col ]) {
82+ q [rear ++] = new int []{row + 1 , col };
83+ visited [row + 1 ][col ] = true ;
84+ }
85+ if (col < m - 1 ) {
86+ if (!visited [row + 1 ][col + 1 ]) {
87+ q [rear ++] = new int []{row + 1 , col + 1 };
88+ visited [row + 1 ][col + 1 ] = true ;
89+ }
90+ }
91+ }
92+ if (col > 0 ) {
93+ if (!visited [row ][col - 1 ]) {
94+ q [rear ++] = new int []{row , col - 1 };
95+ visited [row ][col - 1 ] = true ;
96+ }
97+ }
98+ if (col < m - 1 ) {
99+ if (!visited [row ][col + 1 ]) {
100+ q [rear ++] = new int []{row , col + 1 };
101+ visited [row ][col + 1 ] = true ;
102+ }
103+ }
104+ if (oldRear != rear ) {
105+ System .out .println (Arrays .deepToString (q ));
106+ count ++;
107+ }
108+ }
109+ return count ;
110+ }
111+ }
0 commit comments