GastonFontenla

UVa: 10131 - Is Bigger Smarter?

May 28th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4. #include <stack>
  5. #define x first
  6. #define y second
  7.  
  8. using namespace std;
  9.  
  10. int main()
  11. {
  12.     vector <pair<pair<int, int>, int> > a;
  13.  
  14.     int u, v, i=0;
  15.     while(cin >> u >> v)
  16.         a.push_back(make_pair(make_pair(u, v), i)), i++;
  17.  
  18.     sort(a.begin(), a.end());
  19.  
  20.     int n = a.size();
  21.  
  22.     vector <int> lis(n, 1);
  23.     vector <int> from(n, -1);
  24.  
  25.     int p = 0; ///Posición final de LIS
  26.     int m = 1; ///LIS
  27.     for(int i=1; i<n; i++)
  28.     {
  29.         for(int j=0; j<i; j++)
  30.         {
  31.             if(a[j].x.y > a[i].x.y && lis[i] < lis[j]+1)
  32.             {
  33.                 lis[i] = lis[j]+1;
  34.                 from[i] = j;
  35.             }
  36.         }
  37.         if(lis[i] > m)
  38.         {
  39.             m = lis[i];
  40.             p = i;
  41.         }
  42.     }
  43.  
  44.     stack<int> r;
  45.  
  46.     r.push(p);
  47.     while(from[p] != -1)
  48.     {
  49.         r.push(from[p]);
  50.         p = from[p];
  51.     }
  52.  
  53.     cout << r.size() << endl;
  54.     while(r.size())
  55.     {
  56.         int z = r.top();
  57.         r.pop();
  58.         cout << a[z].y+1 << endl;
  59.     }
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment