码迷,mamicode.com
首页 > 其他好文 > 详细

线段树模板

时间:2018-11-04 19:29:24      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:fine   模板   tween   col   can   iso   bsp   ==   names   

#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.\n",l,r,anx,ans);
    return 0;
}

 

线段树模板

标签:fine   模板   tween   col   can   iso   bsp   ==   names   

原文地址:https://www.cnblogs.com/JCRL/p/9904682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!