RT 过了样例
#include <bits/stdc++.h>
#define FstIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define pb push_back
#define mem(a, v) memset(a, v, sizeof a)
#define pii pair<ll, ll>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
const ll N = 5e5 + 15, M = 2e6;
const ll mod = 1e9 + 7, mod2 = 998244353;
const ld eps = 1e-6;
ll n, m;
ll Ans = 1e10;
struct node
{
ll l, r;
}Sec[N];
bool operator < (node a, node b) { return (a.r - a.l) < (b.r - b.l); }
ll p[N << 1], Len;
struct Tree
{
ll l, r, val, tag;
}T[N << 2];
void pp(ll k)
{
T[k].val = max(T[k << 1].val, T[k << 1 | 1].val);
}
void pd(ll k)
{
T[k << 1].tag += T[k].tag,
T[k << 1 | 1].tag += T[k].tag;
T[k << 1].val += T[k].tag,
T[k << 1 | 1].val += T[k].tag;
T[k].tag = 0;
}
void build(ll k, ll l, ll r)
{
T[k] = {l, r, 0, 0};
if (l == r) return ;
ll mid = (l + r) >> 1;
build(k << 1, l, mid),
build(k << 1 | 1, mid + 1, r);
pp(k);
}
void modify(ll k, ll ql, ll qr, ll v)
{
ll l = T[k].l, r = T[k].r;
if (ql == l && r == qr)
{
T[k].val += v, T[k].tag += v;
return ;
}
pd(k);
ll mid = (l + r) >> 1;
if (qr <= mid) modify(k << 1, ql, qr, v);
if (ql > mid) modify(k << 1 | 1, ql, qr, v);
if (ql <= mid && qr > mid) modify(k << 1, ql, mid, v), modify(k << 1 | 1, mid + 1, qr, v);
pp(k);
}
signed main()
{
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
FstIO;
cin >> n >> m;
for (ll i = 1; i <= n; i ++ )
{
cin >> Sec[i].l >> Sec[i].r;
p[++ Len] = Sec[i].l, p[++ Len] = Sec[i].r;
}
// Len = n << 1;
sort(p + 1, p + Len + 1);
Len = unique(p + 1, p + Len + 1) - p - 1;
// sort(Sec + 1, Sec + n + 1);
for (ll i = 1; i <= n; i ++ )
{
Sec[i].l = lower_bound(p + 1, p + Len + 1, Sec[i].l) - p;
Sec[i].r = lower_bound(p + 1, p + Len + 1, Sec[i].r) - p;
}
sort(Sec + 1, Sec + n + 1);
build(1, 1, Len + 100);
ll Pos = 1, Root = 1;
for (ll i = 1; i <= n; i ++ )
{
modify(1, Sec[i].l, Sec[i].r, 1);
while (T[Root].val >= m && Pos <= i)
{
Ans = min(Ans, Sec[i].r - Sec[i].l - Sec[Pos].r + Sec[Pos].l);
modify(1, Sec[Pos].l, Sec[Pos].r, -1); ++ Pos;
}
}
if (Ans == 1e10) cout << "-1\n";
else cout << Ans << '\n';
}