[CF981F]Round Marriage——二分答案+Hall定理 大佬们的博客 Some Links

题目大意:

懒得讲了。

思路:

二分一个答案以后再去判断,一种神奇的判断是根据人和位置都必须要是连续的,所以下一个人的范围必须是要在前一个人的 l + 1 r + 1 ,然后不断地求区间并集即可。
还有一种判断的方法就是Hall定理,可证明如果不符合,必定有一段连续的区间不满足Hall定理,所以我们就是要求最小的一段字串和,然后利用求最小连续字串和的办法来判断符不符合,同时注意这里的连续字串是在环上连续,注意处理。

/*========================
Author : ylsoi
Problem : CF981F
Algorithm : Hall 
Time : 2018.8.2
=========================*/
#include<bits/stdc++.h>

#define REP(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;

using namespace std;

void File(){
    freopen("CF981F.in","r",stdin);
    freopen("CF981F.out","w",stdout);
}

const int maxn=2e5+10;
const ll mod=20000909;
const int inf=0x3f3f3f3f;
int n,L,a[maxn],b[maxn<<2];
int l[maxn],r[maxn];

ll qpow(ll x,ll y){
    ll ret=1;
    while(y){
        if(y&1)ret=ret*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return ret;
}

bool judge(int lim){
    REP(i,1,n){
        l[i]=lower_bound(b+1,b+3*n+1,a[i]-lim)-b;
        r[i]=upper_bound(b+1,b+3*n+1,a[i]+lim)-b;
        --r[i];
        if(l[i]>r[i])return false;
    }
    REP(i,2,n){
        l[i]=max(l[i],l[i-1]+1);
        r[i]=min(r[i],r[i-1]+1);
        if(l[i]>r[i])return false;
    }
    return true;
}

bool judge_Hall(int lim){
    REP(i,1,n){
        l[i]=lower_bound(b+1,b+3*n+1,a[i]-lim)-b;
        r[i]=upper_bound(b+1,b+3*n+1,a[i]+lim)-b;
        --r[i];
        if(l[i]>r[i])return false;
    }
    int Max=0;
    REP(i,1,n){
        Max=max(Max,l[i]-i);
        if(r[i]-i<Max)return false;
    }
    return true;
}

int solve(){
#define mid ((left+right)>>1)
    int left=0,right=L-1;
    while(left+1<right){
        if(judge(mid))right=mid;
        else left=mid+1;
    }
    if(judge(left))return left;
    else return right;
}

void init(){
    scanf("%d%d",&n,&L);
    REP(i,1,n)scanf("%d",&a[i]);
    REP(i,1,n)scanf("%d",&b[i+n]);
    sort(a+1,a+n+1);
    sort(b+n+1,b+n*2+1);
    REP(i,1,n)b[i]=b[i+n]-L;
    REP(i,2*n+1,3*n)b[i]=b[i-n]+L;
} 
int main(){
    File();
    init();
    cout<<solve()<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ylsoi/article/details/81366724