// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
using namespace std;
#define int long long
#define endl "\n";
const int N=2e5+5;
const int M=1e9+7;
void solve()
{
int n,m;
cin >> n >> m;
vector<int>l,r;
vector<pair<int,int>>a;
int o1=0,o2=1e9;
for (int i=0;i<n;i++){
int x,y;
cin >> x >> y;
if (x>y){
y+=m;
}
o1=max(o1,y-x);
o2=min(o2,y-x);
a.push_back({x,y});
}
sort(a.begin(),a.end());
for (int i=0;i<n;i++){
int x=a[i].first;
int y=a[i].second;
l.push_back(x);
r.push_back(y);
}
for (int i=0;i<2*n;i++){
l.push_back(l[i]+m);
r.push_back(r[i]+m);
}
if (o1==o2){
vector<int>ai;
for (int i=0;i<3*n;i++){
ai.push_back(l[i]);
}
int o=o1;
int j=0;
int mi=l[j];
int mx=r[j];
int c=1;
int u1=-1;
while (mx-mi<m){
int u=0;
int y=0;
int f=0;
int L=0,H=2*n-1,M=(L+H+1)/2;
while (L<H){
if (ai[M]>mx){
H=M-1;
}
else{
L=M;
}
M=(L+H+1)/2;
}
if (u1==-1){
u1=0;
mi=ai[M];
mx=mi+o;
continue;
}
if (mx>=ai[M]+o){
break;
}
mx=ai[M]+o;
c++;
}
if (mx-mi>=m){
cout << c << endl;
}
else{
cout << -1 << endl;
}
return;
}
int u=0;
int j=0;
for (int i=0;i<n;i++){
if (r[i]-l[i]>u){
j=i;
u=r[i]-l[i];
}
}
int mi=l[j];
int mx=r[j];
int c=1;
int u1=-1;
int u2=-1;
while (mx-mi<m){
int u=0;
int y=0;
int f=0;
for (int i=0;i<2*n;i++){
if (l[i]<=mx and r[i]-mx>u){
f=i;
u=r[i]-mx;
}
}
if (u1==-1){
u1=0;
mi=l[f];
mx=r[f];
continue;
}
if (u==0){
break;
}
mx+=u;
c++;
}
if (mx-mi>=m){
cout << c << endl;
}
else{
cout << -1 << endl;
}
}
signed main()
{
ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE
cout << fixed<<setprecision(9);
int t=1;
// cin >> t;
for (int _=1;_<=t;_++){
solve();
}
}
# | 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... |