QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#226612 | #5463. Range Closest Pair of Points Query | ZSH_ZSH | WA | 205ms | 25316kb | C++14 | 1.8kb | 2023-10-26 10:38:19 | 2023-10-26 10:38:20 |
Judging History
answer
#include<bits/stdc++.h>
#define rep(i,a,b) for (register int i=(a);i<=(b);i++)
#define drep(i,a,b) for (register int i=(a);i>=(b);i--)
typedef long long ll;
using namespace std;
const int N=250010;
const double eps=1e-9;
inline int sign(double x)
{
return fabs(x)<eps?0:(x>0?1:-1);
}
int n,Q,X[N],Y[N],ord[N];
mt19937 rng(time(0)^rand()^(*(new int)));
const int B=400;
namespace DS
{
int bel[N],L[N],R[N];
ll f[N],g[N];
void init()
{
rep(i,1,n) bel[i]=(i-1)/B+1;
rep(i,1,n) R[bel[i]]=i;
drep(i,n,1) L[bel[i]]=i;
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
}
void update(int x,ll v)
{
f[x]=min(f[x],v);
g[bel[x]]=min(g[bel[x]],v);
}
ll q(int l)
{
ll ans=1e18;
rep(i,l,R[bel[l]]) ans=min(ans,f[i]);
rep(i,bel[l]+1,bel[n]) ans=min(ans,g[i]);
return ans;
}
}
ll ans[N];
vector<array<int,2> > vec[N];
ll dis(int x,int y)
{
return 1ll*(X[x]-X[y])*(X[x]-X[y])+1ll*(Y[x]-Y[y])*(Y[x]-Y[y]);
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0);
cin>>n>>Q;
rep(i,1,n) cin>>X[i]>>Y[i];
rep(i,1,n) ord[i]=i;
int angle=rng();
sort(ord+1,ord+n+1,[&](int i,int j) -> bool
{
if (i==j) return 0;
double xi=X[i]*cos(angle)-Y[i]*sin(angle),yi=Y[i]*cos(angle)+X[i]*sin(angle);
double xj=X[j]*cos(angle)-Y[j]*sin(angle),yj=Y[j]*cos(angle)+X[j]*sin(angle);
double vi=X[i]*cos(angle)-Y[i]*sin(angle);
double vj=X[j]*cos(angle)-Y[j]*sin(angle);
return sign(vi-vj)==0?0:vi<vj;
});
DS::init();
rep(i,1,Q)
{
int l,r; cin>>l>>r;
vec[r].push_back({l,i});
}
rep(i,1,n)
{
rep(j,max(1,i-3*B),i-1) DS::update(j,dis(i,j));
rep(j,max(1,i-3*B),min(n,i+3*B)) if (ord[j]<i) DS::update(ord[j],dis(i,ord[j]));
for (auto x:vec[i])
{
ans[x[1]]=DS::q(x[0]);
}
}
rep(i,1,Q) printf("%lld\n",ans[i]);
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 3ms
memory: 21368kb
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: 0ms
memory: 20160kb
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: 21564kb
input:
2 1 1 100000000 100000000 1 1 2
output:
19999999600000002
result:
ok 1 number(s): "19999999600000002"
Test #4:
score: 0
Accepted
time: 205ms
memory: 25316kb
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: 0
Accepted
time: 201ms
memory: 24112kb
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:
ok 250000 numbers
Test #6:
score: -100
Wrong Answer
time: 200ms
memory: 23812kb
input:
20000 250000 116 165 150 677 951 676 552 324 267 222 739 755 705 663 235 142 152 714 735 641 414 201 313 663 683 300 403 739 37 521 42 833 553 733 886 449 86 913 55 637 731 932 143 161 500 891 719 79 916 237 431 992 804 210 643 332 165 362 178 332 821 510 762 34 188 83 283 357 743 407 750 487 19 658...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 1 0 1 0 0 0 2 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 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 5 0 0 0 0 0 1 0 0 0 1 1 0 0 0 2 0 0 0 0 0 0 ...
result:
wrong answer 365th numbers differ - expected: '0', found: '1'