QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#640852#5463. Range Closest Pair of Points QueryhxhhxhWA 338ms54892kbC++201.6kb2024-10-14 16:30:442024-10-14 16:30:45

Judging History

你现在查看的是最新测评结果

  • [2024-10-14 16:30:45]
  • 评测
  • 测评结果:WA
  • 用时:338ms
  • 内存:54892kb
  • [2024-10-14 16:30:44]
  • 提交

answer

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#define ll long long
using namespace std;
using namespace __gnu_pbds;
int n,q,cnt,h[250005],L[33];
ll ans[250005],b[888],w[251005];
struct st{
	int x,y;
}a[250005];
vector<int>e[250005],c[250005],p[250005];
gp_hash_table<ll,int>mp;
ll id(int x,int y){
	return x*1000000000+y;
}
void add(int x,int y,int i){
	int t=mp[id(x,y)];
	if(!t) t=mp[id(x,y)]=++cnt;
	p[t].push_back(i);
}
void cg(int x,ll v){
	w[x]=min(w[x],v);
	b[x>>9]=min(b[x>>9],v);
}
ll que(int x){
	ll res=1e18;
	for(;x&511;x++) res=min(res,w[x]);
	for(x>>=9;!(x>>9);x++) res=min(res,b[x]);
	return res;
}
mt19937 rd(time(NULL));
signed main(){
	cin>>n>>q;
	memset(w,0x3f,sizeof(w));
	memset(b,0x3f,sizeof(b));
	for(int i=1;i<=n;i++) scanf("%d %d",&a[i].x,&a[i].y);
	int DX=rd()%999999999,DY=rd()%999999999;
	for(int i=1;i<=n;i++) a[i].x+=DX,a[i].y+=DY;
	for(int i=1;i<=27;i++){
		for(int j=1;j<=cnt;j++) p[j].clear();
		mp.clear(),cnt=0;
		for(int j=1;j<=n;j++){
			int x=a[j].x>>i,y=a[j].y>>i;
			for(int k=-1;k<=1;k++){
				for(int l=-1;l<=1;l++){
					if(mp.find(id(x+k,y+l))!=mp.end()){
						int t=mp[id(x+k,y+l)],d=p[t].size();
						for(int o=max(d-(i<=6?7:7),0);o<d;o++) e[j].push_back(p[t][o]);
					}
				}
			}
			add(a[j].x>>i,a[j].y>>i,j);
		}
	}
	for(int i=1,j;i<=q;i++){
		scanf("%d %d",&h[i],&j);
		c[j].push_back(i);
	}
	for(int i=1;i<=n;i++){
		for(int j:e[i]) if(j<i) cg(j,1ll*(a[i].x-a[j].x)*(a[i].x-a[j].x)+1ll*(a[i].y-a[j].y)*(a[i].y-a[j].y));
		for(int j:c[i]) ans[j]=que(h[j]);
	}
	for(int i=1;i<=q;i++) printf("%lld\n",ans[i]);
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 3ms
memory: 10264kb

input:

5 5
2 4
1 1
3 3
5 1
4 2
1 5
2 3
2 4
3 5
1 3

output:

2
8
8
2
2

result:

ok 5 number(s): "2 8 8 2 2"

Test #2:

score: 0
Accepted
time: 3ms
memory: 12072kb

input:

2 1
1 1
1 1
1 2

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: 0
Accepted
time: 0ms
memory: 12332kb

input:

2 1
1 100000000
100000000 1
1 2

output:

19999999600000002

result:

ok 1 number(s): "19999999600000002"

Test #4:

score: 0
Accepted
time: 223ms
memory: 34960kb

input:

20000 250000
3 10
5 4
4 7
1 5
2 1
10 6
2 3
8 4
2 1
8 5
9 8
7 7
4 5
2 7
9 4
9 10
3 2
9 5
10 2
9 2
3 1
9 9
6 5
9 5
9 10
9 1
1 2
8 8
3 4
7 6
6 2
6 8
6 6
8 4
10 2
1 1
10 2
8 3
4 4
5 5
5 1
4 9
7 6
6 8
6 4
1 6
10 3
3 2
4 10
6 8
9 7
2 10
7 8
10 7
3 2
5 1
6 4
7 9
1 3
4 9
4 8
9 4
5 2
2 2
9 2
9 2
9 6
6 9
8 7
...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 250000 numbers

Test #5:

score: -100
Wrong Answer
time: 338ms
memory: 54892kb

input:

20000 250000
72 45
72 34
34 10
20 96
79 39
43 5
72 49
56 85
1 72
44 70
73 89
69 76
49 89
57 38
39 9
33 47
22 3
96 41
90 82
25 6
72 92
73 38
53 21
16 88
59 9
54 2
14 6
7 94
99 68
27 82
70 50
81 81
60 81
2 98
33 19
98 9
35 36
49 66
86 7
3 95
32 89
62 42
68 88
65 16
94 6
85 10
51 69
90 36
70 87
13 79
4...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
10
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0...

result:

wrong answer 150434th numbers differ - expected: '122', found: '125'