CF gym102354 B. Yet Another Convolution
题面传送门
看到gcd想到的应该是莫比乌斯反演。
但是这个取max而不是求和让这个莫反很难套上去。
有没有什么办法把这个max消掉呢?当然,我们可以二分,转化为计算大于等于这个值的数量。
变成这样的式子:
然后套路反演就可以得到
后面那个东西显然可以排序以后双指针,然后你得到了一个时间复杂度高达的好方法。
考虑优化,里面的瓶颈在于排序,容易发现里面只和而与单独的值无关,所以可以在外围预处理出每个的排好序的vector,就可以降到
另外如果其实是不用算的,这样大概优化了的时间。
code:
#include<bits/stdc++.h>
#define I inline
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define ll long long
#define db double
#define lb long db
#define N (100000+5)
#define M (900+5)
#define K (200000+5)
#define mod 9248440332
#define Mod (mod-1)
#define eps (1e-9)
#define U unsigned int
#define it iterator
#define Gc() getchar()
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) (n*(x-1)+(y))
#define R(n) (rand()*rand()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using namespace std;vector<int> C[N],D[N];
int n,mu[N],pr[N],ph,cnt,Len,Fl[N],A[N],B[N],l,r,mid;
I int CK(int mid,int id){
int i,j,R;ll Ans=0,ToT=0;for(i=id;i<=n;i+=id){
ToT=0;Len=D[i].size();R=0;for(j=0;j<Len;j++){while(R<Len&&D[i][R]<=C[i][j]-mid) R++;ToT+=R;cnt++;}R=Len-1;for(j=Len-1;~j;j--) {while(~R&&D[i][R]>=C[i][j]+mid) R--;ToT+=Len-R-1;}Ans+=ToT*mu[i/id];
}return Ans;
}
int main(){
freopen("1.in","r",stdin);freopen("1.out","w",stdout);
int i,j;scanf("%d",&n);mu[1]=1;for(i=2;i<=n;i++){
!Fl[i]&&(mu[i]=-1,pr[++ph]=i);for(j=1;j<=ph&&i*pr[j]<=n;j++){Fl[i*pr[j]]=1;if(i%pr[j]==0) break;mu[i*pr[j]]=-mu[i];}
}for(i=1;i<=n;i++) scanf("%d",&A[i]);for(i=1;i<=n;i++) scanf("%d",&B[i]);
for(i=1;i<=n;sort(C[i].begin(),C[i].end()),sort(D[i].begin(),D[i].end()),i++)for(j=1;i*j<=n;j++) C[i].PB(A[i*j]),D[i].PB(B[i*j]);
for(i=1;i<=n;i++){cnt=0;l=0;r=1e9;while(l+1<r) mid=l+r>>1,(CK(mid,i)?l:r)=mid;printf("%d ",l);}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2021-04-04 luogu P5471 [NOI2019] 弹跳
2021-04-04 luogu P3829 [SHOI2012]信用卡凸包