[莫比乌斯反演 树状数组] BZOJ 3529 [Sdoi2014]数表
2016-07-08 20:26
543 查看
#include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; typedef pair<int,int> abcd; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } int maxn=0; int prime[100005],num,vst[100005]; int mobius[100005]; abcd sig[100005]; inline void Pre() { mobius[1]=1; for (int i=2;i<=maxn;i++) { if (!vst[i]) { mobius[i]=-1; prime[++num]=i; } for (int j=1;j<=num && prime[j]*i<=maxn;j++) { vst[i*prime[j]]=1; if (i%prime[j]==0) { mobius[i*prime[j]]=0; break; } else mobius[i*prime[j]]=-mobius[i]; } } for (int i=1;i<=maxn;i++) for (int j=i;j<=maxn;j+=i) sig[j].first+=i; for (int i=1;i<=maxn;i++) sig[i].second=i; sort(sig+1,sig+maxn+1); } struct que{ int n,m,a,idx; bool operator < (const que& B) const{ return a<B.a; } }Q[100005]; int Case; namespace BIT{ #define lowbit(x) (x)&-(x) int c[100005]; inline void add(int x,int r){ for (int i=x;i<=maxn;i+=lowbit(i)) c[i]+=r; } inline int sum(int x){ int ret=0; for (int i=x;i;i-=lowbit(i)) ret+=c[i]; return ret; } } int anss[100005]; int main() { read(Case); for (int i=1;i<=Case;i++) { read(Q[i].n); read(Q[i].m); read(Q[i].a); Q[i].idx=i; if (Q[i].n>Q[i].m) swap(Q[i].n,Q[i].m); maxn=max(maxn,Q[i].n); } Pre(); sort(Q+1,Q+Case+1); int lasta=1; for(int i=1;i<=Case;i++){ int newa=upper_bound(sig+1,sig+maxn+1,make_pair(Q[i].a+1,-1))-sig-1; for(int j=lasta;j<=newa;j++) for(int k=sig[j].second;k<=maxn;k+=sig[j].second) BIT::add(k,sig[j].first*mobius[k/sig[j].second]); for(int j=1,k;j<=Q[i].n;j=k+1){ k=min(Q[i].n/(Q[i].n/j),Q[i].m/(Q[i].m/j)); anss[Q[i].idx]+=(BIT::sum(k)-BIT::sum(j-1))*(Q[i].n/j)*(Q[i].m/j); } lasta=newa+1; } for(int i=1;i<=Case;i++) printf("%d\n",anss[i]&0x7fffffff); }
相关文章推荐
- linux中的Make使用模板
- js arguments.caller arguments.callee分析
- poj 2392背包条件限制
- cf478D Red-Green Towers
- SOAPUI使用教程-REST请求工作
- MPLS-2 LDP邻居的建立
- SPOJ 375 树链剖分
- Java实现文件远程上传和下载
- android studio关于build/outputs/apk/中apk或arr或jar无法删除的解决方法
- Android清除本地数据缓存代码案例
- ffmpeg crtmpserver red5 搭建
- Unity5-ABSystem(一):AssetBundle原理
- linux指令查看tomcat日志
- C# 刷新win7桌面
- 深度学习框架的评估与比较
- css3的3D图片旋转
- hdu-5505 数论
- bnuoj_4049 四叉树
- Java线程经典面试题
- 《Pro Express.js》学习笔记——Express框架常用设置项