#include<bits/stdc++.h>
using namespace std;
int n, m, e[200001], s[200001], ma=0, ans=1e9, f[20][200001], tree[530001];
pair<int, int> a[200001];
int process(int u, int v){
if(a[v].second>a[u].second)return v;
return u;
}
void build(int id, int l, int r){
if(l==r){
tree[id]=l;
return;
}
int mid=(l+r)/2;
build(id*2, l, mid);
build(id*2+1, mid+1, r);
tree[id]=process(tree[id*2], tree[id*2+1]);
}
int get(int id, int l, int r, int L, int R){
if(l>R || L>r)return 0;
if(L<=l and r<=R)return tree[id];
int mid=(l+r)/2;
return process(get(id*2, l, mid, L, R), get(id*2+1, mid+1, r, L, R));
}
int main(){
ios::sync_with_stdio(0);cin.tie(nullptr);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s[i]>>e[i];
if(s[i]>e[i])e[i]+=m;
a[i]={s[i], e[i]};
}
sort(a+1, a+n+1);
build(1, 1, n);
for(int i=1;i<=n;i++){
auto[l, r]=a[i];
pair<int, int> nxt={r+1, 0};
int j=lower_bound(a+1, a+n+1, nxt)-a;
f[0][i]=get(1, 1, n, i, j-1);
}
for(int i=1;i<=19;i++){
for(int j=1;j<=n;j++){
f[i][j]=f[i-1][f[i-1][j]];
}
}
for(int i=1;i<=n;i++){
int l=a[i].first, now=i, cnt=1;
for(int j=19;j>=0;j--){
int r=a[f[j][now]].second;
if(r!=0 and r-l+1<=m){
now=f[j][now];
cnt+=(1<<j);
}
}
int r=a[f[0][now]].second;
if(r-l+1>m){
ans=min(ans, cnt+1);
}
}
if(ans==1e9)cout<<-1;
else cout<<ans;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |