Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using int64 = long long;
- int64 n, m;
- std::vector<std::pair<int64, int64>> deer, elves;
- bool check(int64 k)
- {
- int64 j = 1;
- for (int64 i = 1; i <= m; ++i)
- {
- if (j > k)
- continue;
- if (elves[j].first < deer[i].first && deer[i].first < elves[n - k + j].first)
- ++j;
- }
- return j > k;
- }
- int main()
- {
- std::cin >> m >> n;
- deer.assign(m + 1, { -1, -1 });
- elves.assign(n + 1, { -1, -1 });
- for (int64 i = 1; i <= m; ++i)
- {
- std::cin >> deer[i].first;
- deer[i].second = i;
- }
- std::sort(deer.begin(), deer.end());
- for (int64 i = 1; i <= n; ++i)
- {
- std::cin >> elves[i].first;
- elves[i].second = i;
- }
- std::sort(elves.begin(), elves.end());
- int64 l = 0;
- int64 r = std::min(m, n / 2) + 1;
- int64 mid;
- while (r - l > 1)
- {
- mid = (l + r) / 2;
- if (check(mid))
- l = mid;
- else
- r = mid;
- }
- std::cout << l << '\n';
- int64 j = 1;
- for (int64 i = 1; i <= m; ++i)
- {
- if (j > l)
- continue;
- if (elves[j].first < deer[i].first && deer[i].first < elves[n - l + j].first)
- {
- std::cout << deer[i].second << ' ' << elves[j].second << ' ' << elves[n - l + j].second << '\n';
- ++j;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement