CF920F SUM and REPLACE 线段树

给你一个数组a_iD(x)x的约数个数

两种操作:

1.将[l,r]a_i替换为D(a_i)

2.输出a_i ( l <= i <= r )

当区间最大值<=2时,就不会被修改了,因为d(2)=2,d(1)=1。

#include<cstdio>
#include<iostream>
#define R register int
#define ls (tr<<1)
#define rs (tr<<1|1)
const int M=1000010;
using namespace std;
inline long long g() {
    register long long ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
    do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
}
int n,m;
long long sum[1200010],mx[1200010],cnt[1000010];
inline void upd(int tr) {sum[tr]=sum[ls]+sum[rs]; mx[tr]=max(mx[ls],mx[rs]);}
inline void calc() {for(R i=1;i<=M;++i) for(R j=1;i*j<=M;++j) ++cnt[i*j];}
inline void build(int tr,int l,int r) {
    if(l==r) {mx[tr]=sum[tr]=g(); return ;}
    R md=(l+r)>>1; build(ls,l,md),build(rs,md+1,r); upd(tr);
}
inline void change(int tr,int l,int r,int LL,int RR) {
    if(mx[tr]<=2) return ; 
    if(l==r) {sum[tr]=mx[tr]=cnt[sum[tr]]; return ;}
    R md=(l+r)>>1; 
    if(LL>md) change(rs,md+1,r,LL,RR);
    else if(RR<md+1) change(ls,l,md,LL,RR);
    else change(ls,l,md,LL,md),change(rs,md+1,r,md+1,RR); upd(tr);
}
inline long long query(int tr,int l,int r,int LL,int RR) {
    if(l==LL&&r==RR) return sum[tr];
    R md=(l+r)>>1; 
    if(LL>md) return query(rs,md+1,r,LL,RR);
    else if(RR<md+1) return query(ls,l,md,LL,RR);
    else return query(ls,l,md,LL,md)+query(rs,md+1,r,md+1,RR);
}
signed main() {
    n=g(),m=g(); calc(); build(1,1,n);
    for(R i=1,k,l,r;i<=m;++i) {
        k=g(),l=g(),r=g();
        if(k==1) change(1,1,n,l,r);
        else printf("%lld\n",query(1,1,n,l,r));
    }
}

2019.04.18

转载于:https://www.cnblogs.com/Jackpei/p/10731855.html

springboot052基于Springboot+Vue旅游管理系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值