fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int maks_dlu[2001];
  5. int pozycja[2001];
  6. int pop[2001];
  7. int nast[2001];
  8. set<int> secik;
  9.  
  10. int main()
  11. {
  12. ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  13. int wynik = 0;
  14. int n;
  15. cin >> n;
  16. for(int i = 0; i < n; i++)
  17. {
  18. for(int j = 0; j < n; j++)
  19. {
  20. int z;
  21. cin >> z;
  22. maks_dlu[j]++;
  23. if(z == 1)
  24. {
  25. maks_dlu[j] = 0;
  26. }
  27. }
  28. for(int j = 0; j < n; j++)
  29. {
  30. auto it = secik.upper_bound(-maks_dlu[j]);
  31. if(it != secik.end())
  32. {
  33. pop[j] = pozycja[-(*it)];
  34. }
  35. else
  36. {
  37. pop[j] = -1;
  38. }
  39. secik.erase(secik.begin(),it);
  40. secik.insert(-maks_dlu[j]);
  41. pozycja[maks_dlu[j]] = j;
  42. }
  43. secik.clear();
  44. for(int j = n-1; j > -1; j--)
  45. {
  46. auto it = secik.upper_bound(-maks_dlu[j]);
  47. if(it != secik.end())
  48. {
  49. nast[j] = pozycja[-(*it)];
  50. }
  51. else
  52. {
  53. nast[j] = n;
  54. }
  55. secik.erase(secik.begin(),it);
  56. secik.insert(-maks_dlu[j]);
  57. pozycja[maks_dlu[j]] = j;
  58. }
  59. secik.clear();
  60. for(int j = 0; j < n; j++)
  61. {
  62. if(maks_dlu[j] != 0)wynik = max(wynik,(nast[j]-pop[j]-1)*maks_dlu[j]);
  63. }
  64. }
  65. cout << wynik;
  66. }
  67.  
Success #stdin #stdout 0.01s 5284KB
stdin
5
0 1 0 1 0
0 0 0 0 0
0 0 0 0 1
1 0 0 0 0
0 1 0 0 0
stdout
9