Advertisement
a53

Pasari

a53
Aug 21st, 2021
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. #include <fstream>
  2. #include <cassert>
  3.  
  4. using namespace std;
  5.  
  6. ifstream f("pasari.in");
  7. ofstream g("pasari.out");
  8.  
  9. const int Nmax = 1005;
  10.  
  11. int Cer, N, L, A[Nmax][Nmax];
  12.  
  13. int V[Nmax], K;
  14. int Nord[Nmax][Nmax], Sud[Nmax][Nmax], Vest[Nmax][Nmax], Est[Nmax][Nmax];
  15.  
  16. int Mars_L[Nmax][Nmax], Mars_C[Nmax][Nmax];
  17.  
  18. int main()
  19. {
  20. f >> Cer >> N;
  21. assert(Cer == 1 || Cer == 2), assert(5 <= N && N <= 1e3);
  22.  
  23. if (Cer == 1)
  24. f >> L, assert(1 <= L && L <= N);
  25.  
  26. for(int i = 1 ; i <= N; ++i)
  27. for(int j = 1; j <= N; ++j)
  28. f >> A[i][j], assert(1 <= A[i][j] && A[i][j] <= 1e5);
  29.  
  30. if(Cer == 1)
  31. {
  32. int c = 0, Max = 0;
  33.  
  34. for(int C = 1; C <= N; ++C)
  35. {
  36. int nr = 1;
  37.  
  38. for(int j = C - 1; j >= 1; --j)
  39. if(A[L][j] <= A[L][C])
  40. nr++;
  41. else
  42. break;
  43.  
  44. for(int j = C + 1; j <= N; ++j)
  45. if(A[L][j] <= A[L][C])
  46. nr++;
  47. else
  48. break;
  49.  
  50. for(int j = L - 1; j >= 1; --j)
  51. if(A[j][C] <= A[L][C])
  52. nr++;
  53. else
  54. break;
  55.  
  56. for(int j = L + 1; j <= N; ++j)
  57. if(A[j][C] <= A[L][C])
  58. nr++;
  59. else
  60. break;
  61.  
  62. if(nr > Max)
  63. Max = nr, c = C;
  64. }
  65.  
  66. g << c << '\n';
  67. assert(c >= 1 && c <= N);
  68. }
  69. else
  70. {
  71. /// NORD + SUD:
  72. for(int j = 1; j <= N; ++j)
  73. {
  74. /// NORD:
  75. K = 0;
  76.  
  77. for(int i = N; i >= 1; --i)
  78. {
  79. while(K && A[i][j] > A[V[K]][j])
  80. Nord[V[K]][j] = i, --K;
  81.  
  82. V[++K] = i;
  83. }
  84. ///
  85.  
  86. /// SUD:
  87. K = 0;
  88.  
  89. for(int i = 1; i <= N; ++i)
  90. {
  91. while(K && A[i][j] > A[V[K]][j])
  92. Sud[V[K]][j] = i, --K;
  93.  
  94. V[++K] = i;
  95. }
  96.  
  97. for(int k = 1; k <= K; ++k)
  98. Sud[V[k]][j] = N + 1;
  99. ///
  100. }
  101. ///
  102.  
  103. /// VEST + EST:
  104. for(int i = 1; i <= N; ++i)
  105. {
  106. /// VEST:
  107. K = 0;
  108.  
  109. for(int j = N; j >= 1; --j)
  110. {
  111. while(K && A[i][j] > A[i][V[K]])
  112. Vest[i][V[K]] = j, --K;
  113.  
  114. V[++K] = j;
  115. }
  116. ///
  117.  
  118. /// EST:
  119. K = 0;
  120.  
  121. for(int j = 1; j <= N; ++j)
  122. {
  123. while(K && A[i][j] > A[i][V[K]])
  124. Est[i][V[K]] = j, --K;
  125.  
  126. V[++K] = j;
  127. }
  128.  
  129. for(int k = 1; k <= K; ++k)
  130. Est[i][V[k]] = N + 1;
  131. ///
  132. }
  133. ///
  134.  
  135. /// MARS:
  136. for(int i = 1; i <= N; ++i)
  137. for(int j = 1; j <= N; ++j)
  138. {
  139. ++Mars_L[i][Vest[i][j] + 1], --Mars_L[i][Est[i][j]];
  140.  
  141. ++Mars_C[j][Nord[i][j] + 1], --Mars_C[j][Sud[i][j]];
  142. }
  143.  
  144. for(int i = 1; i <= N; ++i)
  145. for(int j = 1; j <= N; ++j)
  146. Mars_L[i][j] += Mars_L[i][j - 1], Mars_C[i][j] += Mars_C[i][j - 1];
  147. ///
  148.  
  149. int x = 0, y = 0, Max = 0;
  150.  
  151. for(int i = 1; i <= N; ++i)
  152. for(int j = 1; j <= N; ++j)
  153. {
  154. int Val = Mars_L[i][j] + Mars_C[j][i] - 1;
  155.  
  156. if(Val > Max)
  157. Max = Val, x = i, y = j;
  158. }
  159.  
  160. g << x << ' ' << y << '\n';
  161. assert(1 <= x && x <= N && 1 <= y && y <= N);
  162. }
  163.  
  164. return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement