SUM and REPLACE

题意:给你n个数,进行m次操作,分别是将区间[l,r]内的所有数替换成自己的因子数 和 对区间[l,r]进行求和。

题解:可以发现2的因子个数还是2,1的因子个数还是1,所以如果某个数被更新成1或者2之后就不需要再进行更新了。

 #include<bits/stdc++.h>
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int N = 3e5+;
const int M = 1e6+;
ll tree[N<<];
bool ok[N<<];
int num[M], a[N];
int n, m;
void PushUp(int rt)
{
tree[rt] = tree[rt<<] + tree[rt<<|];
ok[rt] = ok[rt<<] && ok[rt<<|];
}
void Build(int l, int r, int rt)
{
if(l == r)
{
tree[rt] = a[l];
if(tree[rt] == || tree[rt] == ) ok[rt] = ;
else ok[rt] = ;
return ;
}
int m = l+r >> ;
Build(lson);
Build(rson);
PushUp(rt);
}
ll Query(int L, int R, int l, int r, int rt)
{
if(L <= l && r <= R)
return tree[rt];
int m = l+r >> ;
ll ans = ;
if(L <= m) ans += Query(L,R,lson);
if(m < R) ans += Query(L,R,rson);
return ans;
} void Revise(int L, int R, int l, int r, int rt)
{
if(ok[rt]) return ;
if(l == r)
{
tree[rt] = num[tree[rt]];
if(tree[rt] == || tree[rt] == ) ok[rt] = ;
return ;
}
int m = l+r >> ;
if(L <= m) Revise(L,R,lson);
if(m < R) Revise(L,R,rson);
PushUp(rt);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
memset(num, , sizeof(num));
for(int i = ; i < M; i++)
for(int j = i; j < M; j+=i)
num[j]++;
cin >> n >> m;
for(int i = ; i <= n; i++)
cin >> a[i];
Build(,n,);
int q, l, r;
while(m--)
{
cin >> q >> l >> r;
if(q == )
cout << Query(l,r,,n,) << endl;
else
Revise(l,r,,n,);
}
return ;
}

最新文章

  1. dedecms 文章页图片改为绝对路径
  2. 了解学习JS中this的指向
  3. [转]:Delphi中Format的字符串格式化使用说明
  4. python获取路径
  5. Swift开发第二篇——extension及fatalError
  6. 简单粗暴下载Spring
  7. SDK Build Tools revision (19.0.3) is too low for project Min
  8. UEditor文档
  9. STL中heap算法(堆算法)
  10. IOS开发之表视图(UITableView)
  11. win8.1中如何获得管理员权限步骤
  12. Socket 相关的知识
  13. 打工心态废掉了很多人,包括你吗?(你把现在这家公司的业务都弄清楚、弄懂了吗?君子报仇十年不晚!不离不弃!)good
  14. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)
  15. Cowrie蜜罐部署教程【转载】
  16. cent os 直接访问谷歌的脚本实现
  17. Lua语言的介绍和编程语言的归类
  18. 前端笔记之NodeJS(一)初识NodeJS&amp;内置模块&amp;特点
  19. [转] Torch中实现mini-batch RNN
  20. Introducing XAML Standard and .NET Standard 2.0

热门文章

  1. Linux虚拟机所装软件说明
  2. JS 中获得根目录
  3. wamp不显示文件图标
  4. Web前端开发——Ionic 3.0【爱创课堂专业前端培训】
  5. 从无到满意offer,你需要知道的那些事
  6. RocketMQ中Broker的消息存储源码分析
  7. 无法正常卸载pr
  8. Wpf窗口设置屏幕居中最前显示
  9. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)
  10. Linux--shell重定向与文件处理命令--02