紧急需要大佬们的帮助!!!
#include<iostream>
#include<algorithm>
using namespace std;
struct line
{
long long begin;
long long end;
};
line a[1000001];
bool cmp(line x,line y)
{
return x.begin<y.begin;
}
int main()
{
long long n;
long long k;
cin>>n>>k;
for(long long i=1;i<=k;i++)
{
cin>>a[i].begin>>a[i].end;
if(a[i].begin>a[i].end)
{
a[i].end+=n;
}
}
a[k+1].begin=1e18;
a[k+1].end=1e18;
long long sum=1e18;
sort(a+1,a+1+k,cmp);
for(long long i=1;i<=k;i++)
{
long long l,r;
long long ans=0;
l=a[i].begin+n;
r=a[i].end;
ans++;
bool flag=false;
long long maxend=0;
if(i!=1)
{
a[i-1].begin+=n;
a[i-1].end+=n;
}
for(long long j=i+1;j<k+i;j++)
{
if(j>k)
{
flag=true;
j-=k;
}
if(a[j].begin<=r+1)
{
if(a[j].end>a[maxend].end)
{
maxend=j;
}
if(a[j+1].begin>r+1)
{
r=a[maxend].end;
ans++;
if(r>=l-1)
{
sum=min(sum,ans);
break;
}
}
}
else
{
break;
}
if(flag)
{
j+=k;
}
}
}
if(sum==1e18)
{
cout<<"impossible";
}
else
{
cout<<sum;
}
return 0;
}