Advertisement
Guest User

Untitled

a guest
Feb 14th, 2016
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX(a,b) (a>b?a:b)
  3. #define MIN(a,b) (a<b?a:b)
  4. #define UP upper_bound
  5. #define LB lower_bound
  6. #define LL long long
  7. #define Pi 3.14159265358
  8. #define si size()
  9. #define en end()
  10. #define be begin()
  11. #define fi first
  12. #define se second
  13. #define pb push_back
  14. #define mp make_pair
  15. #define ii set<int>::iterator
  16. #define Tree int ind, int L, int R
  17. #define Left 2*ind,L,(L+R)/2
  18. #define Right 2*ind+1,(L+R)/2+1,R
  19. using namespace std;
  20. int max2[1000001];
  21. int ind1[1000001];
  22. int ind2[1000001];
  23. vector < pair < int , int > > v;
  24. vector < vector < int > > a, MAS1, MAS2, f1, f2, fix, Cur2, v1;
  25. int n, m, k, i, j, res, X, t;
  26. main(){
  27. //freopen("2line.in","r",stdin);
  28. //freopen("2line.out","w",stdout);
  29. cin>>t;
  30. while(t--)
  31. {
  32. scanf("%d%d",&n,&m);
  33. res=0;
  34. a.clear();
  35. MAS1.clear();
  36. MAS2.clear();
  37. f1.clear();
  38. f2.clear();
  39. fix.clear();
  40. Cur2.clear();
  41. v1.clear();
  42. f1.resize(n+5);
  43. f2.resize(m+5);
  44. fix.resize(m+5);
  45. Cur2.resize(n+5);
  46. a.resize(n+5);
  47. MAS2.resize(n+5);
  48. MAS1.resize(n+5);
  49. v1.resize(n+5);
  50.  
  51. for(i=1;i<=n;i++)
  52. {
  53. a[i].resize(m+5);
  54. MAS2[i].resize(m+5);
  55. MAS1[i].resize(m+5);
  56. for(j=1;j<=m;j++)
  57. {
  58. scanf("%d",&a[i][j]);
  59. max2[a[i][j]]=0;
  60. ind2[a[i][j]]=0;
  61. ind1[a[i][j]]=0;
  62. }
  63. }
  64.  
  65. // if()
  66. // for(i=1;i<=m;i++)MAS1[i].resize(n+5);
  67.  
  68.  
  69.  
  70. for(i=1;i<=n;i++)
  71. {
  72. v.clear();
  73. for(j=1;j<=m;j++)
  74. v.pb(mp(a[i][j],j));
  75. X=0;
  76. sort(v.be,v.en);
  77. for(j=0;j<m;j++)
  78. {
  79. if(j==0 || v[j].fi!=v[j-1].fi)X++;
  80. MAS1[i][v[j].se]=X;
  81. }//cout<<"tes"; system("pause");
  82. Cur2[i].resize(X+10);
  83. f1[i].resize(X+10);
  84. X=0;
  85. for(j=0;j<m;j++)
  86. {
  87. if(j==0 || v[j].fi!=v[j-1].fi)X++;
  88. Cur2[i][X]=v[j].fi;
  89. }
  90. }
  91. for(i=1;i<=m;i++)
  92. {
  93. v.clear();
  94. for(j=1;j<=n;j++)
  95. v.pb(mp(a[j][i],j));
  96.  
  97.  
  98. X=0;
  99. sort(v.be,v.en);
  100.  
  101. for(j=0;j<n;j++)
  102. {
  103. if(j==0 || v[j].fi!=v[j-1].fi)X++;
  104. //cout<<"teee "<<v[j].se<<" "<<i<<endl;;system("pause");
  105. MAS2[v[j].se][i]=X;
  106.  
  107. }
  108. f2[i].resize(X+10);
  109. fix[i].resize(X+10);
  110. }
  111.  
  112.  
  113.  
  114.  
  115. for(i=1;i<=n;i++)
  116. for(j=1;j<=m;j++)
  117. {
  118. if(!f1[i][MAS1[i][j]])
  119. v1[i].pb(MAS1[i][j]);
  120. f1[i][MAS1[i][j]]++;
  121. f2[j][MAS2[i][j]]++;
  122. if(max2[a[i][j]]<f2[j][MAS2[i][j]])
  123. max2[a[i][j]]=f2[j][MAS2[i][j]];
  124. }
  125. for(i=1;i<=n;i++)
  126. for(j=1;j<=m;j++)
  127. if(max2[a[i][j]]==f2[j][MAS2[i][j]] && !fix[j][MAS2[i][j]])
  128. ind2[a[i][j]]++, ind1[a[i][j]]++, fix[j][MAS2[i][j]]=1;
  129. for(i=1;i<=n;i++)
  130. {
  131. for(j=1;j<=m;j++)
  132. {
  133. res=max(res,f1[i][MAS1[i][j]]+f2[j][MAS2[i][j]]-1);
  134. if(max2[a[i][j]]==f2[j][MAS2[i][j]])
  135. ind2[a[i][j]]--;
  136. }
  137. for(j=0;j<v1[i].si;j++)
  138. if(ind2[Cur2[i][v1[i][j]]]>0)
  139. res=max(res,f1[i][v1[i][j]]+max2[Cur2[i][v1[i][j]]]);
  140. for(j=1;j<=m;j++)
  141. if(f2[j][MAS2[i][j]]==max2[a[i][j]])
  142. ind2[a[i][j]]=ind1[a[i][j]];
  143. }
  144. cout<<res<<endl;
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement