Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <map>
- #include <string>
- #include <cstring>
- #include <set>
- #include <queue>
- #include <stack>
- #include <bitset>
- #include <algorithm>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- struct line
- {
- int x, y, num;
- };
- bool comp (line a, line b)
- {
- if (a.x == b.x)
- return a.y < b.y;
- return a.x < b.x;
- }
- vector <line> lines;
- int d[500], c[500];
- int f (int v)
- {
- if (d[v])
- return d[v];
- int i = v + 1, t, mx = 0;
- while (i < lines.size() && lines[i].x == lines[v].x)
- i++;
- if (i == lines.size())
- return d[v] = 1;
- while (i < lines.size() && lines[i].y < lines[v].y)
- {
- t = f(i);
- if (t > mx)
- {
- mx = t;
- c[v] = i;
- }
- i++;
- }
- return d[v] = mx + 1;
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- int n, i, j, a, b, mx = 1, mi = 0;
- vector <int> ans;
- line tl;
- cin >> n;
- for (i = 0; i < n; i++)
- {
- cin >> a >> b;
- tl.num = i + 1;
- tl.x = a;
- tl.y = b;
- lines.push_back(tl);
- c[i] = -1;
- }
- sort(lines.begin(), lines.end(), comp);
- for (i = 0; i < lines.size(); i++)
- if (f(i) > mx)
- {
- mx = d[i];
- mi = i;
- }
- while (mi != -1)
- {
- ans.push_back(mi);
- mi = c[mi];
- }
- cout << ans.size() << endl;
- reverse(ans.begin(), ans.end());
- for (i = 0; i < ans.size(); i++)
- cout << lines[ans[i]].num << ' ';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement