Loading

trick整理:序列二分log^2转log

example :

check(...)://O(logX)
    ...
l=MIN,r=MAX,ans;
while(l<=r) {
    mid=l+r>>1;
    bool flag=true;
    for(int i=1;i<=n;i++) 
        if(!check(i,mid))
            flag=false;
    if(flag) r=mid-1,ans=mid;
    else l=mid+1;
}
//O(nlogVlogX) 

//->
shuffle(id+1,id+n+1);
int ans=MIN;
for(int i=1;i<=n;i++) {
    if(check(i,ans)) continue;
    ll l=MIN,r=MAX;
    while(l<=r) {
        ll mid=l+r>>1;
        if(check(i,mid)) r=mid-1,ans=mid;
        else l=mid+1;
    }
}
//O(nlogX+lognlogVlogX)

笔者注:logn的底数可能不为2(通过查阅不知道正不正确的资料,可以确定底数应该在\([\frac{e}{2},2]\)),但是,笔者不会算,以后再说吧。
by lyk

posted @ 2024-11-09 17:56  班级账号  阅读(24)  评论(0)    收藏  举报