[国家集训队]JZPFAR

分析

一次过,非常爽。考虑 上的最近邻查询。虽然有人已经证明 上的最近邻查询时间复杂度会被构造数据卡到 。但是多数情况下是非常快的。那么这道题,只是把最近邻换成第 大距离。我们只需要用个堆来动态维护一下就好了。注意因为有编号的问题,所以要注意查询的小细节。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long 
int read() {
    int x = 0,f = 0;char ch = getchar();
    while(!isdigit(ch)) {if(ch == '-')f = 1;ch = getchar();}
    while(isdigit(ch)) {x = x * 10 + ch - '0';ch = getchar();}
    return f ? -x : x;
}
const int N = 1e5 + 100;
#define Pair pair<int,int>
struct Point{int p[2],id;}A[N];
bool cmp0(Point a,Point b) {return a.p[0] < b.p[0];}
bool cmp1(Point a,Point b) {return a.p[1] < b.p[1];}
struct Node{
    int mx[2],mi[2],p[2],ch[2],id;
}t[N];
int n,size,rt;
void pushup(int u) {
    int lc = t[u].ch[0],rc = t[u].ch[1];
    for(int i = 0;i < 2;i++) {
        t[u].mx[i] = t[u].mi[i] = t[u].p[i];
        if(lc) {
            t[u].mx[i] = max(t[u].mx[i],t[lc].mx[i]);
            t[u].mi[i] = min(t[u].mi[i],t[lc].mi[i]);
        }
        if(rc) {
            t[u].mx[i] = max(t[u].mx[i],t[rc].mx[i]);
            t[u].mi[i] = min(t[u].mi[i],t[rc].mi[i]);
        }
    }
} 
int build(int l,int r,int tpye) {
    if(r < l) return 0;
    int mid = l + r >> 1;
    if(tpye) nth_element(A+l,A+mid,A+r+1,cmp1);
    else nth_element(A+l,A+mid,A+r+1,cmp0);
    int u = ++size;
    t[u].p[0] = A[mid].p[0];t[u].p[1] = A[mid].p[1];t[u].id = A[mid].id;
    t[u].ch[0] = build(l,mid-1,1 - tpye);
    t[u].ch[1] = build(mid+1,r,1 - tpye);pushup(u);
    return u;
}
const int inf = 1e9;
priority_queue<Pair,vector<Pair>,greater<Pair> > heap;
int pow2(int x) {return x * x;}
int dist(int u,Point x) {
    if(!u) return -inf;
    int P1 = pow2(t[u].mx[0] - x.p[0]);
    int P2 = pow2(t[u].mi[0] - x.p[0]);
    int P3 = pow2(t[u].mx[1] - x.p[1]);
    int P4 = pow2(t[u].mi[1] - x.p[1]);
    return max(P1,P2) + max(P3,P4);
}
int dist(int x,int y,Point b) {
    return pow2(x-b.p[0]) + pow2(y-b.p[1]);
}
void ask(int u,Point x) {
    if(!u) return;
    int dis = dist(t[u].p[0],t[u].p[1],x);
    if(heap.top() < Pair(dis,-t[u].id)) heap.pop(),heap.push(Pair(dis,-t[u].id));
    int disl = dist(t[u].ch[0],x),disr = dist(t[u].ch[1],x);
    if(disl > disr) {
        if(disl >= heap.top().first) ask(t[u].ch[0],x);
        if(disr >= heap.top().first) ask(t[u].ch[1],x);
    }
    else {
        if(disr >= heap.top().first) ask(t[u].ch[1],x);
        if(disl >= heap.top().first) ask(t[u].ch[0],x);
    }
}
void print(int x) {
    if(!x) return;
    cout << x <<" "<<t[x].mi[0] <<" "<<t[x].mx[0] <<" "<<t[x].mi[1]<<" "<<t[x].mx[1]<< endl;
    print(t[x].ch[0]);print(t[x].ch[1]); 
}
signed main() {
    n = read();
    for(int i = 1;i <= n;i++) A[i].p[0] = read(),A[i].p[1] = read(),A[i].id = i;
    rt = build(1,n,0);
    //print(rt);
    int m = read();
    while(m--) {
        while(heap.size()) heap.pop();
        int x = read(),y = read(),k = read();
        for(int i = 1;i <= k;i++) heap.push(Pair(-1,0));
        ask(rt,(Point){x,y});
        printf("%lld\n", -heap.top().second);
    }
}
全部评论

相关推荐

狸猫换offer:神通广大的互联网
点赞 评论 收藏
分享
2025-12-24 08:50
已编辑
上海工程技术大学 数据分析师
9.21-28参加第一轮七牛云秋招项目比赛,三人组队做一个AI角色对话网站。我们的目标是争取拿offer和前16名的奖金(最低500元)10.11打电话通知我们准备参加终面10.14参加终面(官网上说就一次终面),面试官为技术人员。我们来回路程4小时。10.23打电话通知我们,进了前20,10.27还有一次路演面试,评出前16名10.27再次参加终面,面试官为高管。来回路程4小时,告知我们一周内出结果。10.31在群里询问是否出结果,没有回复。11.5公司人员告知第一批有一波通知结果了,另外还有一波。11.12一位队员收到offer,两位队员被拒绝,评奖没消息。12.2在群里询问公司人员是否有消息,一位公司人员退群,没有回复。12.4在群里询问公司人员是否有消息,说是会帮忙反馈。12.12我们打听到HR主动告知某位参赛选手获奖500元。12.13在群里询问是否有消息,公司人员说在最终确认中,近期会联系,或者通过官网了解情况。12.23在群里询问是否有结果,公司人员告知没有获奖。————分割线————图1图2为群里聊天记录,图3为奖项设置,可怜的学生党为了个offer和500块都被硬拖3个月。我说实话辛苦了一周做项目参加比赛,没有offer,没有获奖也是做好心理准备的,但是不能这么无视我们的消息,并且拖着我们三个月吧。所有的方案、代码、产品说明文档等等参赛资料都是公开透明提交给公司的,我在的群参赛者大群是第11个,200多人,最多三人一队,有两批比赛,所以至少上百个队伍,上百个方案吧,很难说不是白嫖这么大规模的方案和创意。中间在群里问比赛结果,每次要么是不回复,要么是说问问负责人,还在确定中等等,然后就拖着。10月23号前20都已经出来了,排个名次要整整2个月吗?一直到今天12月23号跟我们说没获奖(不知道是不是因为队员没有接受他们offer的原因,给的薪资白菜价,所以队员拒绝了offer)官网说的第一批十月中旬公布结果,结果到现在花了3个月时间,之前有别人说是不是来窃取创意的,我还说这么大公司不至于吧。现在看来就是来白嫖方案的,做项目做了一个星期,后面又花精力,又花时间的做PPT搞了两次终演,最后因为队伍不是公司招聘候选,所以这么无视我们?
程序员小白条:七牛云好几年这样的事情了,这玩意都是潜规则搞好的,没啥,能有这能力的,说实话也不去七牛云了
秋招落幕,你是He or...
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务