线段树模板
Posted jcrl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树模板相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #define N 100001 using namespace std; int num=0,ans=0,minn,anx,yes[N],no[N]; void xs(){ memset(yes,0,sizeof(yes)); memset(no,0,sizeof(no)); no[0]=no[1]=1; for (int i=2; i<N; i++){ if (!no[i]) yes[num++]=i; for (int j=0; j<num && i*yes[j]<N; j++){ no[i*yes[j]]=1; if (!(i%yes[j])) break; } } } void work(int start,int s,int x,int L,int R){ if (x>=minn){ if ((s>ans) || (s==ans && x<anx)) ans=s,anx=x; } if ((L==R) && (L>x)) work(start,s<<1,x*L,1,1); for (int i=start; i<num; i++){ if (yes[i]>R) return; int j=yes[i],ll=L-1,l=L,r=R,y=x,ss=s,m=1; while (1){ m++; ss+=s; ll/=j; l/=j; r/=j; if (ll==r) break; y*=j; work(i+1,ss,y,l,r); } m=1<<m; if (s<(ans/m)) return; } } int main(){ int l,r; scanf("%d%d",&l,&r); xs(); if (l==1 && r==1) ans=1,anx=1; else { minn=l,ans=2,anx=l; work(0,1,1,l,r); } printf("Between %d and %d, %d has a maximum of %d divisors. ",l,r,anx,ans); return 0; }
以上是关于线段树模板的主要内容,如果未能解决你的问题,请参考以下文章