本题判无解给定一堆左闭右开区间,就是判有没有某处区间个数大于 m+mx。离散化是贺的,其他也基本是贺的。我没有抄题解,只是这一部分改不出来改成这样的。
for(int i=1;i<=n;i++) b[i]=a[i].s,b[n+i]=a[i].t;
sort(b+1,b+(n<<1)+1);
int tot=unique(b+1,b+(n<<1)+1)-b-1;
for(int i=1;i<=n;i++){
a[i].s=lower_bound(b+1,b+tot+1,a[i].s)-b;
a[i].t=lower_bound(b+1,b+tot+1,a[i].t)-b;
}
for(int i=1;i<=n;i++) c[a[i].s]++,c[a[i].t]--;
for(int i=1;i<=tot;i++){
sum[i]=sum[i-1]+c[i];
if(sum[i]>mx+m){
puts("impossible");return;
}
}
memset(c,0,sizeof(c));