关注
第三道,90% #include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <cmath>
#include <iterator>
#include <algorithm>
#include <functional>
using namespace std;
const int MAXN = 20005;
struct segment {
int left, right;
int mx, mark;
};
int n, k;
vector<double> a, v_left, v_right;
segment tree[MAXN << 2];
void push_up(int rt)
{
tree[rt].mx = max(tree[rt << 1].mx, tree[rt << 1 | 1].mx);
}
void push_down(int rt)
{
if (tree[rt].mark) {
tree[rt << 1].mx += tree[rt].mark;
tree[rt << 1 | 1].mx += tree[rt].mark;
tree[rt << 1].mark += tree[rt].mark;
tree[rt << 1 | 1].mark += tree[rt].mark;
tree[rt].mark = 0;
}
}
void build(int l, int r, int rt)
{
tree[rt].left = l;
tree[rt].right = r;
tree[rt].mark = 0;
if (l == r)
tree[rt].mx = 0;
else {
int mid = (l + r) >> 1;
build(l, mid, rt << 1);
build(mid + 1, r, rt << 1 | 1);
push_up(rt);
}
}
void modify(int l, int r, int rt)
{
if (l <= tree[rt].left && tree[rt].right <= r) {
tree[rt].mx += 1;
tree[rt].mark += 1;
return;
}
push_down(rt);
int mid = (tree[rt].left + tree[rt].right) >> 1;
if (l <= mid) modify(l, r, rt << 1);
if (r >= mid + 1) modify(l, r, rt << 1 | 1);
push_up(rt);
}
int query(int l, int r, int rt)
{
if (l <= tree[rt].left && tree[rt].right <= r)
return tree[rt].mx;
push_down(rt);
int ans = 0, mid = (tree[rt].left + tree[rt].right) >> 1;
if (l <= mid) ans = max(ans, query(l, r, rt << 1));
if (r >= mid + 1) ans = max(ans, query(l, r, rt << 1 | 1));
return ans;
}
int main()
{
// freopen("in.txt", "r", stdin);
cin >> n >> k;
for (int i = 0; i < n; i++) {
double l, r;
cin >> l >> r;
v_left.push_back(l);
v_right.push_back(r);
a.push_back(l);
a.push_back(r);
}
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
build(1, a.size(), 1);
for (int i = 0; i < n; i++) {
int l = lower_bound(a.begin(), a.end(), v_left[i]) - a.begin() + 1;
int r = lower_bound(a.begin(), a.end(), v_right[i]) - a.begin() + 1;
modify(l, r - 1, 1);
}
int left = 0, right = 0;
vector<pair<double, double>> ans;
for (int i = 1; i <= (int)a.size(); i++) {
int q = query(i, i, 1);
if (q >= k) {
if (left == 0)
left = i, right = i;
else
right = i;
}
else {
if (left != 0) {
ans.push_back(make_pair(a[left - 1], a[right]));
left = 0;
}
}
}
cout << ans.size() << endl;
for (auto p: ans)
cout << p.first << " " << p.second << endl;
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 春招什么时候投? #
10848次浏览 180人参与
# 牛友的春节生活 #
8193次浏览 168人参与
# 春节前,你还在投简历吗? #
14515次浏览 168人参与
# 从夯到拉,锐评职场mentor #
5323次浏览 81人参与
# 牛客AI体验站 #
14907次浏览 267人参与
# 春节提前走,你用什么理由请假? #
10726次浏览 247人参与
# 备战春招/暑实,现在应该做什么? #
5307次浏览 163人参与
# 实习到现在,你最困惑的一个问题 #
4682次浏览 134人参与
# 怎么给家人解释你的工作? #
51586次浏览 208人参与
# 工作后,你落下了哪些病根 #
32410次浏览 277人参与
# 机械制造秋招总结 #
103341次浏览 886人参与
# 上班摸鱼,你都在干些什么? #
39156次浏览 246人参与
# 没有家庭托举的我是怎么找工作的 #
35743次浏览 266人参与
# 今年秋招你收到了多少封邮件? #
37697次浏览 278人参与
# 距离春招还有一个月,你现在是什么开局? #
7208次浏览 117人参与
# xxx岗位的一天 #
44945次浏览 279人参与
# 暑期实习什么时候投? #
7364次浏览 175人参与
# 聊聊Agent开发 #
25717次浏览 605人参与
# 一起聊华为 #
191784次浏览 895人参与
# 什么是优秀的实习经历 #
35978次浏览 387人参与
