题意:

给你一堆区间,然后让你把覆盖k次及k次以上的区间都输出出来


思路:

直接暴力扫分界点就好了

分界点是正向覆盖k次的就加进左端点,是反向,就加进右端点,然后输出就好了



#include<bits/stdc++.h>
using namespace std;

#define maxn 3000006
pair<int,int> Line[maxn];
int tot = 1;
int t[maxn];
int main()
{
    int n,k;scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++)
    {
        int x,y;scanf("%d%d",&x,&y);
        Line[tot++]=make_pair(x,-1);
        Line[tot++]=make_pair(y,1);
    }
    sort(Line+1,Line+tot);
    int flag1 = 0,flag2 = 0;
    vector<int> ans1;
    vector<int> ans2;
    for(int i=1;i<tot;i++)
    {
        t[i] = t[i-1] - Line[i].second;
        if(t[i]==k&&t[i-1]==k-1)
            ans1.push_back(Line[i].first);
    }
    memset(t,0,sizeof(t));
    for(int i=1;i<tot;i++)
    {
        t[i] = t[i-1] - Line[i].second;

        if(t[i]==k-1&&t[i-1]==k)
            ans2.push_back(Line[i].first);
    }
    if(ans1.size()!=ans2.size())
        ans2.push_back(Line[tot-1].first);
    cout<<ans1.size()<<endl;
    for(int i=0;i<ans1.size();i++)
        cout<<ans1[i]<<" "<<ans2[i]<<endl;
}







Description



You are given n segments on the coordinate axis Ox and the number k. The point is satisfied if it belongs to at least k segments. Find the smallest (by the number of segments) set of segments on the coordinate axis Ox which contains all satisfied



Input



The first line contains two integers n and k (1 ≤ k ≤ n ≤ 106) — the number of segments and the value of k.

The next n lines contain two integers li, ri ( - 109 ≤ li ≤ ri ≤ 109) each — the endpoints of the i-th segment. The segments can degenerate and intersect each other. The segments are given in arbitrary order.



Output



First line contains integer m

Next m lines contain two integers aj, bj (aj ≤ bj) — the ends of j-th segment in the answer. The segments should be listed in the order from left to right.



Sample Input



Input



3 2 0 5 -3 2 3 8



Output



2 0 2 3 5



Input



3 2 0 5 -3 3 3 8



Output



1 0 5