typedef pair<int,int> Pair; const int N=1e5+5; int n,m,t; int i,j,k; Pair p[N]; int val[N],wigh[N]; //记录区间长度,区间间隔 bool cmp(Pair a,Pair b) { if(a.fr!=b.fr) return a.fr<b.fr; return a.sc<b.sc; } int main() { IOS; while(cin>>n>>m){ for(i=1;i<=n;i++){ cin>>p[i].fr>>p[i].sc; } sort(p+1,p+1+n,cmp); //合并区间 int num=0,L=p[1].fr,R=p[1].sc; for(i=2;i<=n;i++){ if(R+1>=p[i].fr){ R=max(R,p[i].sc); L=min(L,p[i].fr); } else{ p[++num]=Pair{ L,R }; L=p[i].fr , R=p[i].sc; } } p[++num]=Pair{ L,R }; //计算将区间连接起来的价值及花费 for(i=1;i<=num;i++){ val[i]=p[i].sc-p[i].fr+1; //区间长度 if(i!=num) wigh[i]=p[i+1].fr-p[i].sc-1; //区间间隔 } //尺取 int ans=0,s=1,e=2,cost=0,tmp=val[1]; while(s<=num){ while(e<=num && cost+wigh[e-1]<=m){ cost += wigh[e-1]; //将 e 区间连接到尾部 tmp += (wigh[e-1]+val[e]); //e-1 后面的间隔 + e 区间的长度 e++; } ans=max(ans,tmp+m-cost); //样例二提示 if(e>num) break; tmp -= (wigh[s]+val[s]); //将区间断开,并去掉间隔 cost -= wigh[s]; s++; } cout<<ans<<endl; } //PAUSE; return 0; }