Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <stack>
- #define x first
- #define y second
- using namespace std;
- int main()
- {
- vector <pair<pair<int, int>, int> > a;
- int u, v, i=0;
- while(cin >> u >> v)
- a.push_back(make_pair(make_pair(u, v), i)), i++;
- sort(a.begin(), a.end());
- int n = a.size();
- vector <int> lis(n, 1);
- vector <int> from(n, -1);
- int p = 0; ///Posición final de LIS
- int m = 1; ///LIS
- for(int i=1; i<n; i++)
- {
- for(int j=0; j<i; j++)
- {
- if(a[j].x.y > a[i].x.y && lis[i] < lis[j]+1)
- {
- lis[i] = lis[j]+1;
- from[i] = j;
- }
- }
- if(lis[i] > m)
- {
- m = lis[i];
- p = i;
- }
- }
- stack<int> r;
- r.push(p);
- while(from[p] != -1)
- {
- r.push(from[p]);
- p = from[p];
- }
- cout << r.size() << endl;
- while(r.size())
- {
- int z = r.top();
- r.pop();
- cout << a[z].y+1 << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment