QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#782641 | #9748. 最大公因数的平方和 | Zpair | WA | 2ms | 6028kb | C++20 | 2.0kb | 2024-11-25 20:49:40 | 2024-11-25 20:49:41 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef unsigned int ll;
const int N=1e5+5;
int mu[N],a[N],b[N],n,B;
ll f[N],ans[N];
int l1[N],r1[N],l2[N],r2[N],m;
bool pd[N];
vector<int> d[N];
int s1[N],s2[N];
struct node{
int x;ll v;
};
struct node2{
int x,y,idx,op;
};
vector<node2> qr[N];
vector<node> vet[N];
vector<int> ad[N],bd[N];
int mp[N],l[N],r[N];
ll sum[N],val[N];
int main(){
cin>>n;
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=1;i<=n;++i)
scanf("%d",&b[i]);
mu[1]=1;
for(int i=2;i<=n;++i)if(!pd[i]){
mu[i]=-1;
for(int j=i+i;j<=n;j+=i)
mu[j]=-mu[j/i],pd[j]=1;
}
for(int i=1;i<=n;++i)
for(int j=i;j<=n;j+=i)
d[j].push_back(i);
for(int i=1;i<=n;++i)
for(int x:d[a[i]])
ad[x].push_back(i);
for(int i=1;i<=n;++i)
for(int x:d[b[i]])
bd[x].push_back(i);
for(int i=1;i<=n;++i)
for(int j=1;j*i<=n;++j)
f[i*j]+=(ll)mu[i]*j*j;
cin>>m;
for(int i=1;i<=m;++i)
scanf("%d%d%d%d",&l1[i],&r1[i],&l2[i],&r2[i]);
B=sqrt(n);
for(int x=1;x<=B;++x){
for(int i=1;i<=n;++i)
s1[i]=s1[i-1]+(a[i]%x==0);
for(int i=1;i<=n;++i)
s2[i]=s2[i-1]+(b[i]%x==0);
for(int i=1;i<=m;++i)
ans[i]+=f[x]*(s1[r1[i]]-s1[l1[i]-1])*(s2[r2[i]]-s2[l2[i]-1]);
}
for(int x=B+1;x<=n;++x)
for(int i:ad[x])
for(int j:bd[x])
vet[i].push_back({j,f[x]});
for(int i=1;i<=n;++i){
mp[i]=i/B;
if(!l[mp[i]])
l[mp[i]]=i;
r[mp[i]]=i;
}
for(int i=1;i<=m;++i){
qr[r1[i]].push_back({l2[i],r2[i],i,1});
qr[l1[i]-1].push_back({l2[i],r2[i],i,-1});
}
for(int i=1;i<=n;++i){
for(auto [x,v]:vet[i]){
val[x]+=v;
sum[mp[x]]+=v;
}
for(auto [x,y,id,op]:qr[i]){
int bx=mp[x],by=mp[y];
if(bx==by){
for(int i=x;i<=y;++i)
ans[id]+=op*val[i];
}
else{
for(int i=x;i<=r[bx];++i)
ans[id]+=op*val[i];
for(int i=bx+1;i<by;++i)
ans[id]+=op*sum[i];
for(int i=l[by];i<=y;++i)
ans[id]+=op*val[i];
}
}
}
for(int i=1;i<=m;++i)
printf("%u\n",ans[i]);
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 6028kb
input:
5 4 1 5 3 2 1 2 3 4 5 5 3 3 2 3 3 4 2 4 3 4 3 4 5 5 1 1 1 1 2 2
output:
2 14 12 1 4
result:
ok 5 lines
Test #2:
score: -100
Wrong Answer
time: 2ms
memory: 4700kb
input:
1000 564 82 818 337 917 532 941 590 783 74 256 176 714 159 262 803 869 716 12 448 523 981 664 533 797 520 872 966 710 103 118 101 288 113 363 356 87 475 515 641 147 374 424 788 883 496 230 157 926 942 999 220 886 509 987 99 400 458 993 343 946 684 205 4 925 727 875 939 830 95 486 870 741 846 916 321...
output:
21813763 1246074 277861 4763347 46474208 69758586 1505957 216875165 1728014 879218 822545 70822310 57026771 48534314 3321792 10664091 15910674 81932461 142026227 77503898 53034684 5374865 10276910 154589395 56335044 11568831 47827693 3607792 62986341 30391263 108312101 16656515 31648151 8808985 1590...
result:
wrong answer 1st lines differ - expected: '21490984', found: '21813763'