#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define MAXN 200005
#define MOD 1000000007
#define FOR(i, l, r) for (int i = l; i <= r; ++i)
#define FOD(i, r, l) for (int i = r; i >= l; i--)
#define fillchar(a, x) memset(a, x, sizeof(a))
#define rep(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define BIT(x,i) ((x>>i)&1)
#define MASK(i) (1ll<<(i))
#define FILE ""
void fastip(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
if (fopen(FILE".inp","r")){
freopen(FILE".inp","r",stdin);
freopen(FILE".out","w",stdout);
}
}
const int MAX=200005;
const ll INF=1000000010;
const int div2=(MOD+1)/2;
int m;
struct Range{
int l, r;
int fin;
bool operator < (const Range &o){
if (l!=o.l) return l<o.l;
return r<o.r;
}
};
int n;
vector<Range> a;
int up[MAX][20];
void solve(){
cin>>n>>m;
vector<int> nen;
rep(i,n){
int l,r; cin>>l>>r;
if (l>r) r+=m;
a.push_back({l,r,l+m});
nen.push_back(l);
nen.push_back(r);
nen.push_back(l+m);
}
nen.push_back(0);
nen.push_back(m);
nen.push_back(m*2);
sort(nen.begin(),nen.end());
nen.erase(unique(nen.begin(),nen.end()),nen.end());
for(Range &rg:a){
rg.l=lower_bound(nen.begin(),nen.end(),rg.l)-nen.begin();
rg.r=lower_bound(nen.begin(),nen.end(),rg.r)-nen.begin();
rg.fin=lower_bound(nen.begin(),nen.end(),rg.fin)-nen.begin();
}
sort(a.begin(),a.end());
// cout<<m<<'\n';
// for(Range rg: a) cout<<rg.l<<' '<<rg.r<<'\n';cout<<'\n';
int mx=nen.size();
for(Range rg:a) up[rg.l][0]=max(up[rg.l][0],rg.r);
FOR(i,1,mx) up[i][0]=max(up[i][0],up[i-1][0]);
FOR(j,1,19) FOR(i,0,mx) up[i][j]=up[up[i][j-1]][j-1];
// FOR(j,0,19) {FOR(i,0,mx) cout<<up[i][j]<<' ';cout<<'\n';}
// for(Range rg:a){
// int sta=rg.l;
// int fin=rg.fin;
//
// cout<<sta<<' '<<fin<<'\n';
//
// }
int best=INF;
for(Range rg:a){
int sta=rg.l;
int fin=rg.fin;
int cnt=1;
FOD(j,19,0){
if (up[sta][j]<fin){
sta=up[sta][j];
cnt+=(1<<j);
}
}
// cout<<cnt<<'\n';
if (up[sta][0]==fin) best=min(best,cnt);
}
cout << (best==INF ? -1 : best);
}
int main(){
fastip();
solve();
}
Compilation message (stderr)
Main.cpp: In function 'void fastip()':
Main.cpp:22:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
22 | freopen(FILE".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
23 | freopen(FILE".out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | 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... |