萌新求调
查看原帖
萌新求调
1248522
mlvx楼主2025/1/14 16:28
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,W=3e5+10;
int n,q,rt[W];vector<int>g[W];
struct SGT{
    int cnt;
    struct Tree{int ls,rs,cnt;}tr[W<<5];
    void update(int l,int r,int k,int lst,int&p){
        p=++cnt,tr[p].ls=tr[lst].ls,tr[p].rs=tr[lst].rs;
        if(l==r)return tr[p].cnt=tr[lst].cnt+1,void();
        int mid=l+r>>1;
        if(k<=mid)update(l,mid,k,tr[lst].ls,tr[p].ls);
        else update(mid+1,r,k,tr[lst].rs,tr[p].rs);
        tr[p].cnt=tr[tr[p].ls].cnt+tr[tr[p].rs].cnt;
    }int query(int l,int r,int le,int ri,int rt1,int rt2){
        if(l>=le&&r<=ri)return tr[rt1].cnt-tr[rt2].cnt;
        int mid=l+r>>1,ret=0;
        if(le<=mid)ret+=query(l,mid,le,ri,tr[rt1].ls,tr[rt2].ls);
        if(ri>mid)ret+=query(mid+1,r,le,ri,tr[rt1].rs,tr[rt2].rs);
        return ret;
    }
}t;
int main(){
    cin>>n;
    for(int i=1,x,y;i<=n;i++)cin>>x>>y,g[x+y+1].push_back(x-y+100001);
    for(int i=1;i<=W-10;i++){
        rt[i]=rt[i-1];
        for(int j:g[i])t.update(1,W-9,j,rt[i-1],rt[i]);
    }cin>>q;
    for(int a,b,k;q--;){
        cin>>a>>b>>k;int l=0,r=W-9,aa=a+b+1,bb=a-b+100001;
        for(int mid;l<r;mid=l+r>>1,cerr<<max(bb-mid,1)<<' '<<min(bb+mid,W-9)<<'\n',t.query(1,W-9,max(bb-mid,1),min(bb+mid,W-9),rt[min(aa+mid,W-9)],rt[max(aa-mid,1)-1])>=k?r=mid:l=mid+1);
        cout<<l<<'\n';
    }return 0;
}
2025/1/14 16:28
加载中...