QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#142663 | #5463. Range Closest Pair of Points Query | TadijaSebez | WA | 204ms | 69312kb | C++14 | 1.5kb | 2023-08-19 17:28:27 | 2023-08-19 17:28:30 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
const int N=250050;
int x[N],y[N],l[N],r[N];
ll ans[N];
int n,q;
ll sq(int x){
return (ll)x*x;
}
ll Dist(int i,int j){
return sq(x[i]-x[j])+sq(y[i]-y[j]);
}
const ll inf=1e18;
const int L=27;
map<pair<int,int>,int> last[L];
int ptr[L];
vector<int> Qs[N];
ll mn[L][N];
void Set(int lvl,int i,ll x){
for(;i>0;i-=i&-i){
mn[lvl][i]=min(mn[lvl][i],x);
}
}
ll Get(int lvl,int i){
ll ans=inf;
for(;i<=n;i+=i&-i){
ans=min(ans,mn[lvl][i]);
}
return ans;
}
int main(){
scanf("%i %i",&n,&q);
for(int i=1;i<=n;i++){
scanf("%i %i",&x[i],&y[i]);
}
for(int i=1;i<=q;i++){
scanf("%i %i",&l[i],&r[i]);
Qs[r[i]].pb(i);
}
for(int j=0;j<L;j++){
for(int i=1;i<=n;i++){
mn[j][i]=inf;
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<L;j++){
int X=x[i]>>j;
int Y=y[i]>>j;
if(last[j].count({X,Y})){
ptr[j]=max(ptr[j],last[j][{X,Y}]+1);
}
last[j][{X,Y}]=i;
for(int dx=-1;dx<=1;dx++){
for(int dy=-1;dy<=1;dy++){
if(dx==0 && dy==0)continue;
if(last[j].count({X+dx,Y+dy})){
int idx=last[j][{X+dx,Y+dy}];
ll dist=Dist(i,idx);
Set(j,idx,dist);
}
}
}
}
for(int qi:Qs[i]){
int lvl=-1;
for(int j=L-1;~j;j--){
if(ptr[j]<=l[qi]){
lvl=j;
break;
}
}
if(lvl==-1)ans[qi]=0;
else{
ans[qi]=Get(lvl,l[qi]);
}
}
}
for(int i=1;i<=q;i++)printf("%lld\n",ans[i]);
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 65188kb
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: 2ms
memory: 67196kb
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: 65156kb
input:
2 1 1 100000000 100000000 1 1 2
output:
19999999600000002
result:
ok 1 number(s): "19999999600000002"
Test #4:
score: 0
Accepted
time: 94ms
memory: 69312kb
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: 204ms
memory: 67908kb
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 154th numbers differ - expected: '40', found: '41'