求调
查看原帖
求调
826786
Outrageous楼主2023/9/10 18:48
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#include<bitset>
#include<limits.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
void in(int &x){
	char c=getchar(), f=1;
	while ((c<'0' || c>'9') && c!='-') c=getchar();
	if (c=='-') f=-1, c=getchar();
	for (x=0; c>='0' && c<='9'; c=getchar())
		x=x*10+c-'0';
	x*=f;
}
void out(int x){
	if (x<0) putchar('-'), x=-x;
	if (x>0){
		out(x/10);
		putchar(x%10+'0');
	}
}
struct ccf{
	int l,r;
}a[500005];
int t[4000005],ad[4000005],p[4000005];
bool cmp(ccf x,ccf y){return (x.r-x.l)<(y.r-y.l);}
void add(int now,int l,int r,int x,int y,int k){
	if(x==l&&r==y){
		t[now]+=k;
		ad[now]+=k;
		return;
	}
	int mid=l+r>>1;
	if(mid>=x)add(now*2,l,mid,x,min(mid,y),k);
	if(mid+1<=y)add(now*2+1,mid+1,r,max(mid+1,x),y,k);
	t[now]=max(t[now*2],t[now*2+1])+ad[now];
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int n,m;
	int cnt=0;
	in(n),in(m);
	for(int i=1;i<=n;i++){
		in(a[i].l),in(a[i].r);
		p[++cnt]=a[i].l;
		p[++cnt]=a[i].r;
	}
	sort(p+1,p+cnt+1);
	int x=unique(p+1,p+cnt+1)-(p+1);
	for(int i=1;i<=n;i++){
		a[i].l=lower_bound(p+1,p+x+1,a[i].l)-p;
		a[i].r=lower_bound(p+1,p+x+1,a[i].r)-p;
	}
	sort(a+1,a+n+1,cmp);
	int j=1,ans=0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		add(1,1,cnt,a[i].l,a[i].r,1);
		while(t[1]>=m&&j<=i){
			ans=min(ans,(a[i].r-a[i].l)-(a[j].r-a[j].l));
			add(1,1,cnt,a[j].l,a[j].r,-1);
			j++;
		}
	}if(ans==0x3f3f3f3f)printf("-1");
	else printf("%d\n",ans);
	return 0;
}
2023/9/10 18:48
加载中...