一些卡常小建议
查看原帖
一些卡常小建议
961972
Lele_Programmer楼主2025/1/7 23:25

修改和查询的时候,能不重排就不重排。

76pts:

inline int query(int l,int r,int x) {
    int ans=-inf;
    if (B[l]!=B[r]) {
        _rep(i,B[l]+1,B[r]-1) {
            int p=lower_bound(arr+L[i],arr+R[i]+1,pii{x-tag[i],114514LL},cmp)-(arr+1);
            if (p<L[i]) continue;
            ans=max(ans,max(pre[p],arr[p].first+taghis[i]));
        }
        pushtag(B[l]),pushtag(B[r]);
        rebuild(B[l]),rebuild(B[r]);
        _rep(i,l,R[B[l]]) if (a[i]<x) ans=max(ans,his[i]);
        _rep(i,L[B[r]],r) if (a[i]<x) ans=max(ans,his[i]);
    } else {
        pushtag(B[l]);
        rebuild(B[l]);
        _rep(i,l,r) if (a[i]<x) ans=max(ans,his[i]);
    }
    return ans;
}

100pts:

inline int query(int l,int r,int x) {
    int ans=-inf;
    if (B[l]!=B[r]) {
        _rep(i,B[l]+1,B[r]-1) {
            int p=lower_bound(arr+L[i],arr+R[i]+1,pii{x-tag[i],114514LL},cmp)-(arr+1);
            if (p<L[i]) continue;
            ans=max(ans,max(pre[p],arr[p].first+taghis[i]));
        }
        _rep(i,l,R[B[l]]) if (a[i]+tag[B[i]]<x) ans=max(ans,max(his[i],a[i]+taghis[B[i]]));
        _rep(i,L[B[r]],r) if (a[i]+tag[B[i]]<x) ans=max(ans,max(his[i],a[i]+taghis[B[i]]));
    } else {
        _rep(i,l,r) if (a[i]+tag[B[i]]<x) ans=max(ans,max(his[i],a[i]+taghis[B[i]]));
    }
    return ans;
}
2025/1/7 23:25
加载中...