Advertisement
Asif_Anwar

UVa 103 - Stacking Boxes

May 13th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <vector>
  7. #include <set>
  8. #include <map>
  9. //#include <unordered_set>
  10. //#include <unordered_map>
  11. #include <queue>
  12. //#include <ctime>
  13. //#include <cassert>
  14. //#include <complex>
  15. #include <string>
  16. #include <cstring>
  17. //#include <chrono>
  18. //#include <random>
  19. #include <bitset>
  20. using namespace std;
  21. //using namespace chrono;
  22. #define pb push_back
  23. #define FastIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  24. #define F first
  25. #define S second
  26. typedef long long ll;
  27. typedef vector< int > vi;
  28. typedef vector< ll > V;
  29. typedef map<int, int > mp;
  30. #define debug cout << -1 << endl;
  31. #define REP(i, a, b) for(int i=a; i<b; i++)
  32. #define f0r(i, n) for (int i = 0; i < n; ++i)
  33. #define fore(a, x) for (auto& a : x)
  34. #define fori(i, a, b) for (int i = (a); i < (b); ++i)
  35. //#define pop pop_back
  36. #define sz(a) (int)a.size()
  37. //#define fin cin
  38. //#define fout cout
  39. const ll MOD = 1000000007;
  40. const int INF = (int)1e9;
  41. int dx[] = {-1, 0, 1, -1, 1, -1, 0, 1};
  42. int dy[] = {-1, -1, -1, 0, 0, 1, 1, 1};
  43. const double PI = acos(-1.0);
  44. const double diff = 1e-6;
  45. int n, m;
  46.  
  47. bool cmp(vector< int > a, vector< int > b)
  48. {
  49.     for(int i=0; i<m; i++) {
  50.         if(a[i] >= b[i]) return false;
  51.     }
  52.     return true;
  53. }
  54.  
  55. void solve()
  56. {
  57.     while(cin >> n >> m) {
  58.         vector< pair< vector< int >, int > > v(n);
  59.         for(int i=0; i<n; i++) {
  60.             for(int j=0; j<m; j++) {
  61.                 int x;
  62.                 cin >> x;
  63.                 (v[i].F).pb(x);
  64.             }
  65.             sort((v[i].F).begin(), (v[i].F).end());
  66.             v[i].S = i+1;
  67.         }
  68.         sort(v.begin(), v.end());
  69.         vector< pair< int, vector< int > > > ans(n);
  70.         for(int i=0; i<n; i++) {
  71.             ans[i].F = 1;
  72.             (ans[i].S).pb(v[i].S);
  73.         }
  74.         for(int i=0; i<n; i++){
  75.             for(int j=0; j<i; j++) {
  76.                 if(cmp(v[j].F, v[i].F)) {
  77.                     if(1 + ans[j].F > ans[i].F) {
  78.                         ans[i].F = 1+ans[j].F;
  79.                         (ans[i].S).clear();
  80.                         //int xx = sz(ans[j].S);
  81.                         for(auto x: ans[j].S) {
  82.                             (ans[i].S).pb(x);
  83.                         }
  84.                         (ans[i].S).pb(v[i].S);
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.         int mx = 0;
  90.         int pos = -1;
  91.         for(int i=0; i<n; i++) {
  92.             if(mx < ans[i].F) {
  93.                 mx = ans[i].F;
  94.                 pos = i;
  95.             }
  96.         }
  97.         cout << mx << "\n";
  98.         for(auto xl: ans[pos].S) {
  99.             cout << xl << " ";
  100.         }
  101.         cout << "\n";
  102.     }
  103. }
  104.  
  105. int main()
  106. {
  107.     int t;
  108.     t = 1;
  109.     //cin >> t;
  110.     while(t--) {
  111.         solve();
  112.     }
  113. }
  114.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement