可以事先打表观察每个数的约数个数,观察到如果进行替换,若干次后这个数便会被替换成1。

所以我们可以直接暴力的进行区间修改,若这个数已经到达1或2,则以后就不再修改,用并查集和树状数组进行维护。

这个方法用了P2391 白雪皑皑的思想处理,用并查集标记该点已经不再用替换。

code:

#include<bits/stdc++.h>
#include<cctype>
#define maxn 300010
#define lowbit(x) (x&(-x))
typedef long long ll;
using namespace std;
ll n,m;
ll fa[maxn],k,l,r;
ll a[maxn],tree[maxn*4];
ll d[1000010];
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=x*10+(c^48);c=getchar();}
if(flag)x=-x;
}
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void add(int x,ll d)
{
while(x<=n)
{
tree[x]+=d;
x+=lowbit(x);
}
}
ll query(int x)
{
ll sum=0;
while(x)
{
sum+=tree[x];
x-=lowbit(x);
}
return sum;
}
int main()
{
for(register int i=1;i<=1000000;++i)
{
for(register int j=i;j<=1000000;j+=i)
d[j]++;//将每个数的约数个数预处理出来,便于后面替换
}
read(n);
read(m);
for(register int i=1;i<=n;++i)
{
read(a[i]);
add(i,a[i]);
fa[i]=i;
}
fa[n+1]=n+1;
while(m--)
{ read(k);
read(l);
read(r);
if(l>r)
swap(l,r);
if(k==1)
{
for(register int i=l;i<=r;)
{
add(i,(ll)d[a[i]]-a[i]);
a[i]=(ll)d[a[i]];
if(a[i]<=2)
fa[i]=i+1;//若这个数已经为1或2,这将其指向它下一个数
if(i==find(i))
i++;
else
i=fa[i];//进行跳转,忽略不再要替换的数
}
}
else
printf("%lld\n",query(r)-query(l-1));
}
return 0;
}

最新文章

  1. 百度地图API显示多个标注点带检索框
  2. union和union all有什么不同?
  3. Web前端开发工程师的就业前景
  4. ACdream1157 Segments(CDQ分治 + 线段树)
  5. U3D assetbundle打包
  6. 关于修改Android手机的音量
  7. OpenCV训练分类器制作xml文档
  8. Tomcat查看用户名密码
  9. 前Google人谈团队管理:针对不同员工的情境管理法和如何选择合理的团队规模
  10. 加密芯片ALPU
  11. 好的安排小明(南阳19)(DFS)
  12. 微信小程序在开发中遇到的问题与解决方法
  13. Flask实现异步非阻塞请求功能
  14. Java Map 键值对排序 按key排序和按Value排序
  15. openstack安装-计算节点-nova计算服务安装
  16. [USACO 102]Agri-Net
  17. git add 不必要的文件 如何撤回
  18. 使用dshow捕获摄像头图像
  19. 玩转Android拍摄功能
  20. win10系统下cmd输入一下安装的软件命令提示拒绝访问解决办法

热门文章

  1. 黎活明8天快速掌握android视频教程--17_创建数据库与完成数据添删改查
  2. 《T-GCN: A Temporal Graph Convolutional Network for Traffic Prediction》 论文解读
  3. HTML&amp;CSS面试高频考点(三)
  4. spring quartz 每30分钟执行一次cronExpression表达式怎么写
  5. CountDownLatch和CyclicBarrier 傻傻的分不清?超长精美图文又来了
  6. 记一次WIN10 WLAN消失修复
  7. 小白写了一堆if-else,大神实在看不下去了,竟然用策略模式直接摆平了
  8. HotSpot项目结构
  9. 「从零单排canal 04」 启动模块deployer源码解析
  10. hdu 4352 XHXJ&#39;s LIS 数位DP+最长上升子序列