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

浙公网安备 33010602011771号